ath79: add support for TP-Link TL-MR6400
authorEnrico Mioso <mrkiko.rs@gmail.com>
Fri, 17 Jan 2020 12:15:52 +0000 (13:15 +0100)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Tue, 21 Jan 2020 13:15:48 +0000 (14:15 +0100)
This device is an LTE router supported in ar71xx so far.
As per original commit, hardware specifications (v1.0 EU):
- SoC: QCA9531
- Flash: Winbond W25Q64FV (8MiB)
- RAM: EtronTech EM6AB160TSE-5G (64MiB)
- Wireless: SoC platform only (2.4GHz b/g/n, 2x internal antenna)
- Ethernet: 2NIC (3x100M + 1x100M)
- WWAN: TP-LINK LTE MODULE (2x external detachable antenna)
- Power: DC 12V 1A

Flashing instructions:
You can flash via tftp recovery (serve factory image as /mr6400_tp_recovery.bin
on 192.168.0.66/24, connect to any ethernet port and power on device while
holding the reset button). Flashing via OEM web interface does not work.

Known issues:
- LTE module does not always come up during boot (showing USB enumeration errors). Similar behavior has been reported at least from one user for ar71xx, too. Turning USB off and on again will serve as a workaround.
- eth0 (LAN) always shows carrier as 1 even if no cable is plugged in (this works "correctly" on ar71xx)

Signed-off-by: Enrico Mioso <mrkiko.rs@gmail.com>
[several adjustments]
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
Tested-by: Filip Moc <lede@moc6.cz>
target/linux/ath79/dts/qca9531_tplink_tl-mr6400-v1.dts [new file with mode: 0644]
target/linux/ath79/generic/base-files/etc/board.d/01_leds
target/linux/ath79/generic/base-files/etc/board.d/02_network
target/linux/ath79/image/generic-tp-link.mk

diff --git a/target/linux/ath79/dts/qca9531_tplink_tl-mr6400-v1.dts b/target/linux/ath79/dts/qca9531_tplink_tl-mr6400-v1.dts
new file mode 100644 (file)
index 0000000..7299257
--- /dev/null
@@ -0,0 +1,167 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+#include "qca953x.dtsi"
+
+/ {
+       compatible = "tplink,tl-mr6400-v1", "qca,qca9531";
+       model = "TP-Link TL-MR6400 v1";
+
+       aliases {
+               led-boot = &led_power;
+               led-failsafe = &led_power;
+               led-running = &led_power;
+               led-upgrade = &led_power;
+               label-mac-device = &wmac;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               /* D12 */
+               wan {
+                       label = "tp-link:white:wan";
+                       gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
+               };
+
+               /* D11 */
+               4g {
+                       label = "tp-link:white:4g";
+                       gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
+               };
+
+               /* D5 */
+               wps {
+                       label = "tp-link:white:wps";
+                       gpios = <&gpio 3 GPIO_ACTIVE_HIGH>;
+               };
+
+               /* D3 */
+               wlan {
+                       label = "tp-link:white:wlan";
+                       gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               /* D2 */
+               led_power: power {
+                       label = "tp-link:white:power";
+                       gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
+               };
+
+               /* D4 */
+               lan {
+                       label = "tp-link:white:lan";
+                       gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               /* SW2 */
+               reset {
+                       label = "Reset button";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+
+               /* SW3 */
+               rfkill {
+                       label = "RF kill button";
+                       linux,code = <KEY_RFKILL>;
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+       };
+
+       gpio-export {
+               compatible = "gpio-export";
+
+               gpio_usb_power {
+                       gpio-export,name = "tp-link:power:lte";
+                       gpio-export,output = <0>;
+                       gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&uart {
+       status = "okay";
+};
+
+&spi {
+       status = "okay";
+
+       num-cs = <1>;
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <25000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       uboot: partition@0 {
+                               label = "u-boot";
+                               reg = <0x000000 0x020000>;
+                               read-only;
+                       };
+
+                       partition@20000 {
+                               compatible = "tplink,firmware";
+                               label = "firmware";
+                               reg = <0x020000 0x7d0000>;
+                       };
+
+                       art: partition@7f0000 {
+                               label = "art";
+                               reg = <0x7f0000 0x010000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&eth0 {
+       status = "okay";
+
+       phy-handle = <&swphy0>;
+
+       mtd-mac-address = <&uboot 0x1fc00>;
+       mtd-mac-address-increment = <1>;
+};
+
+&eth1 {
+       mtd-mac-address = <&uboot 0x1fc00>;
+       mtd-mac-address-increment = <(-1)>;
+};
+
+&wmac {
+       status = "okay";
+
+       mtd-cal-data = <&art 0x1000>;
+       mtd-mac-address = <&uboot 0x1fc00>;
+};
+
+&usb0 {
+       #address-cells = <1>;
+       #size-cells = <0>;
+       status = "okay";
+
+       hub_port: port@1 {
+               reg = <1>;
+               #trigger-source-cells = <0>;
+       };
+};
+
+&usb_phy {
+       status = "okay";
+};
index de4e8b4a7f092f4c8fdf07a4aaf387ca7735f383..1023ba7a391f8f636c599d32d207f9ad33964d1a 100755 (executable)
@@ -215,6 +215,11 @@ tplink,re450-v2)
        ucidef_set_led_netdev "lan_data" "LAN Data" "tp-link:green:lan_data" "eth0" "tx rx"
        ucidef_set_led_netdev "lan_link" "LAN Link" "tp-link:green:lan_link" "eth0" "link"
        ;;
        ucidef_set_led_netdev "lan_data" "LAN Data" "tp-link:green:lan_data" "eth0" "tx rx"
        ucidef_set_led_netdev "lan_link" "LAN Link" "tp-link:green:lan_link" "eth0" "link"
        ;;
+tplink,tl-mr6400-v1)
+       ucidef_set_led_switch "lan" "LAN" "tp-link:white:lan" "switch0" "0x0e"
+       ucidef_set_led_netdev "wan" "WAN" "tp-link:white:wan" "eth1"
+       ucidef_set_led_netdev "4g" "4G" "tp-link:white:4g" "usb0"
+       ;;
 tplink,tl-wr842n-v2)
        ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
        ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x04"
 tplink,tl-wr842n-v2)
        ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
        ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x04"
index a96b504d5ac032065631a2f21fe762b861314ec5..0bae9dc3849ce1118effd6186b62cb9771855584 100755 (executable)
@@ -236,6 +236,11 @@ ath79_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "0@eth0" "2:lan:3" "3:lan:2" "4:lan:1" "1:wan"
                ;;
                ucidef_add_switch "switch0" \
                        "0@eth0" "2:lan:3" "3:lan:2" "4:lan:1" "1:wan"
                ;;
+       tplink,tl-mr6400-v1)
+               ucidef_set_interfaces_lan_wan "eth0.1 eth1" "usb0"
+               ucidef_add_switch "switch0" \
+                       "0@eth0" "1:lan:1" "2:lan:3" "3:lan:2"
+               ;;
        tplink,tl-wr842n-v2)
                ucidef_set_interface_wan "eth1"
                ucidef_add_switch "switch0" \
        tplink,tl-wr842n-v2)
                ucidef_set_interface_wan "eth1"
                ucidef_add_switch "switch0" \
index a7266f05a9716ea4deea99ff6406828b49d3dacd..53138e343b2d92a3332e2d442b3449190faf4636 100644 (file)
@@ -374,6 +374,18 @@ define Device/tplink_re450-v2
 endef
 TARGET_DEVICES += tplink_re450-v2
 
 endef
 TARGET_DEVICES += tplink_re450-v2
 
+define Device/tplink_tl-mr6400-v1
+  $(Device/tplink-8mlzma)
+  SOC := qca9531
+  DEVICE_MODEL := TL-MR6400
+  DEVICE_VARIANT := v1
+  TPLINK_HWID := 0x64000001
+  DEVICE_PACKAGES := kmod-usb2 kmod-usb-net kmod-usb-net-rndis kmod-usb-serial \
+       kmod-usb-serial-option adb-enablemodem
+  SUPPORTED_DEVICES += tl-mr6400
+endef
+TARGET_DEVICES += tplink_tl-mr6400-v1
+
 define Device/tplink_tl-wdr3500-v1
   $(Device/tplink-8mlzma)
   SOC := ar9344
 define Device/tplink_tl-wdr3500-v1
   $(Device/tplink-8mlzma)
   SOC := ar9344