diff --git a/target/linux/ramips/base-files/etc/board.d/01_leds b/target/linux/ramips/base-files/etc/board.d/01_leds index 61f662b496..61fbf0f3f3 100755 --- a/target/linux/ramips/base-files/etc/board.d/01_leds +++ b/target/linux/ramips/base-files/etc/board.d/01_leds @@ -336,6 +336,19 @@ tiny-ac) set_wifi_led "$board:orange:wifi" set_usb_led "$board:green:usb" ;; +tl-wr840n-v4) + set_wifi_led "$board:green:wlan" + ucidef_set_led_switch "lan" "lan" "$board:green:lan" "switch0" "0x1e" + ucidef_set_led_switch "wan" "wan" "$board:green:wan" "switch0" "0x01" + ;; +tl-wr841n-v13) + set_wifi_led "$board:green:wlan" + ucidef_set_led_switch "lan1" "lan1" "$board:green:lan1" "switch0" "0x2" + ucidef_set_led_switch "lan2" "lan2" "$board:green:lan2" "switch0" "0x4" + ucidef_set_led_switch "lan3" "lan3" "$board:green:lan3" "switch0" "0x8" + ucidef_set_led_switch "lan4" "lan4" "$board:green:lan4" "switch0" "0x10" + ucidef_set_led_switch "wan" "wan" "$board:green:wan" "switch0" "0x01" + ;; vocore-8M|\ vocore-16M) ucidef_set_led_netdev "eth" "ETH" "vocore:orange:eth" "eth0" diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network index 214db9df38..22b231bf96 100755 --- a/target/linux/ramips/base-files/etc/board.d/02_network +++ b/target/linux/ramips/base-files/etc/board.d/02_network @@ -169,6 +169,8 @@ ramips_setup_interfaces() mzk-wdpr|\ rb750gr3|\ rt-n14u|\ + tl-wr840n-v4|\ + tl-wr841n-v13|\ ubnt-erx|\ ubnt-erx-sfp|\ ur-326n4g|\ diff --git a/target/linux/ramips/base-files/etc/diag.sh b/target/linux/ramips/base-files/etc/diag.sh index 4c8f709efb..0f4e646ce1 100644 --- a/target/linux/ramips/base-files/etc/diag.sh +++ b/target/linux/ramips/base-files/etc/diag.sh @@ -35,6 +35,8 @@ get_status_led() { nbg-419n2|\ pwh2004|\ r6220|\ + tl-wr840n-v4|\ + tl-wr841n-v13|\ vr500|\ wnce2001|\ wndr3700v5|\ diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh index e146d1c476..3eb66dc646 100755 --- a/target/linux/ramips/base-files/lib/ramips.sh +++ b/target/linux/ramips/base-files/lib/ramips.sh @@ -487,6 +487,12 @@ ramips_board_detect() { *"Timecloud") name="timecloud" ;; + *"TL-WR840N v4") + name="tl-wr840n-v4" + ;; + *"TL-WR841N v13") + name="tl-wr841n-v13" + ;; *"UBNT-ERX") name="ubnt-erx" ;; diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh index 07530837d6..9b5da57146 100755 --- a/target/linux/ramips/base-files/lib/upgrade/platform.sh +++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh @@ -230,7 +230,9 @@ platform_check_image() { ;; c20i|\ c50|\ - mr200) + mr200|\ + tl-wr840n-v4|\ + tl-wr841n-v13) [ "$magic" != "03000000" ] && { echo "Invalid image type." return 1 diff --git a/target/linux/ramips/dts/TL-WR840NV4.dts b/target/linux/ramips/dts/TL-WR840NV4.dts new file mode 100644 index 0000000000..f139483a48 --- /dev/null +++ b/target/linux/ramips/dts/TL-WR840NV4.dts @@ -0,0 +1,62 @@ +/dts-v1/; + +#include "TL-WR84XN.dtsi" + +#include +#include + +/ { + compatible = "tplink,tl-wr840n-v4", "mediatek,mt7628an-soc"; + model = "TP-Link TL-WR840N v4"; + + gpio-keys-polled { + compatible = "gpio-keys-polled"; + #address-cells = <1>; + #size-cells = <0>; + poll-interval = <20>; + + reset { + label = "reset"; + gpios = <&gpio1 6 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + + lan { + label = "tl-wr840n-v4:green:lan"; + gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + }; + + power { + label = "tl-wr840n-v4:green:power"; + gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; + }; + + wan { + label = "tl-wr840n-v4:green:wan"; + gpios = <&gpio1 11 GPIO_ACTIVE_LOW>; + }; + + wlan { + label = "tl-wr840n-v4:green:wlan"; + gpios = <&gpio1 12 GPIO_ACTIVE_LOW>; + }; + + wps { + label = "tl-wr840n-v4:green:wps"; + gpios = <&gpio1 5 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&pinctrl { + state_default: pinctrl0 { + gpio { + ralink,group = "p0led_an", "p2led_an", "perst", "refclk", "wdt", "wled_an"; + ralink,function = "gpio"; + }; + }; +}; diff --git a/target/linux/ramips/dts/TL-WR841NV13.dts b/target/linux/ramips/dts/TL-WR841NV13.dts new file mode 100644 index 0000000000..40f833ced3 --- /dev/null +++ b/target/linux/ramips/dts/TL-WR841NV13.dts @@ -0,0 +1,88 @@ +/dts-v1/; + +#include "TL-WR84XN.dtsi" + +#include +#include + +/ { + compatible = "tplink,tl-wr841n-v13", "mediatek,mt7628an-soc"; + model = "TP-Link TL-WR841N v13"; + + gpio-keys-polled { + compatible = "gpio-keys-polled"; + #address-cells = <1>; + #size-cells = <0>; + poll-interval = <20>; + + reset { + label = "reset"; + gpios = <&gpio1 6 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + + rfkill { + label = "rfkill"; + gpios = <&gpio1 5 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + + power { + label = "tl-wr841n-v13:green:power"; + gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; + }; + + wps { + label = "tl-wr841n-v13:green:wps"; + gpios = <&gpio1 14 GPIO_ACTIVE_LOW>; + }; + + lan1 { + label = "tl-wr841n-v13:green:lan1"; + gpios = <&gpio1 10 GPIO_ACTIVE_LOW>; + }; + + lan2 { + label = "tl-wr841n-v13:green:lan2"; + gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + }; + + lan3 { + label = "tl-wr841n-v13:green:lan3"; + gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; + }; + + lan4 { + label = "tl-wr841n-v13:green:lan4"; + gpios = <&gpio1 7 GPIO_ACTIVE_LOW>; + }; + + wan_green { + label = "tl-wr841n-v13:green:wan"; + gpios = <&gpio1 11 GPIO_ACTIVE_LOW>; + }; + + wan_orange { + label = "tl-wr841n-v13:orange:wan"; + gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; + }; + + wlan { + label = "tl-wr841n-v13:green:wlan"; + gpios = <&gpio1 12 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&pinctrl { + state_default: pinctrl0 { + gpio { + ralink,group = "gpio", "p0led_an", "p1led_an", "p2led_an", "p3led_an", "p4led_an", "perst", "refclk", "uart1", "wdt", "wled_an"; + ralink,function = "gpio"; + }; + }; +}; diff --git a/target/linux/ramips/dts/TL-WR84XN.dtsi b/target/linux/ramips/dts/TL-WR84XN.dtsi new file mode 100644 index 0000000000..c9d0cddb37 --- /dev/null +++ b/target/linux/ramips/dts/TL-WR84XN.dtsi @@ -0,0 +1,67 @@ +#include "mt7628an.dtsi" + +/ { + chosen { + bootargs = "console=ttyS0,115200"; + }; + + memory@0 { + device_type = "memory"; + reg = <0x0 0x4000000>; + }; +}; + +&spi0 { + status = "okay"; + + m25p80@0 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <10000000>; + m25p,chunked-io = <32>; + + partition@0 { + label = "boot"; + reg = <0x0 0x20000>; + read-only; + }; + + partition@20000 { + label = "firmware"; + reg = <0x20000 0x7a0000>; + }; + + partition@7c0000 { + label = "config"; + reg = <0x7c0000 0x10000>; + read-only; + }; + + factory: partition@7d0000 { + label = "factory"; + reg = <0x7d0000 0x30000>; + read-only; + }; + }; +}; + +&ehci { + status = "disabled"; +}; + +&ohci { + status = "disabled"; +}; + +&wmac { + status = "okay"; + mtd-mac-address = <&factory 0xf100>; + mediatek,mtd-eeprom = <&factory 0x20000>; +}; + +ðernet { + mtd-mac-address = <&factory 0xf100>; + mediatek,portmap = "llllw"; +}; diff --git a/target/linux/ramips/image/mt7628.mk b/target/linux/ramips/image/mt7628.mk index f8bd2c18b2..fbfc37d986 100644 --- a/target/linux/ramips/image/mt7628.mk +++ b/target/linux/ramips/image/mt7628.mk @@ -2,6 +2,8 @@ # MT7628 Profiles # +DEVICE_VARS += TPLINK_BOARD_ID + define Device/mt7628 DTS := MT7628 BLOCKSIZE := 64k @@ -26,6 +28,28 @@ define Device/miwifi-nano endef TARGET_DEVICES += miwifi-nano +define Device/tl-wr840n-v4 + DTS := TL-WR840NV4 + IMAGE_SIZE := 7808k + DEVICE_TITLE := TP-Link TL-WR840N v4 + TPLINK_BOARD_ID := TL-WR840NV4 + KERNEL := $(KERNEL_DTB) + IMAGES += tftp-recovery.bin + IMAGE/factory.bin := tplink-v2-image + IMAGE/tftp-recovery.bin := pad-extra 128k | $$(IMAGE/factory.bin) + IMAGE/sysupgrade.bin := tplink-v2-image -s | append-metadata | \ + check-size $$$$(IMAGE_SIZE) +endef +TARGET_DEVICES += tl-wr840n-v4 + +define Device/tl-wr841n-v13 + $(Device/tl-wr840n-v4) + DTS := TL-WR841NV13 + DEVICE_TITLE := TP-Link TL-WR841N v13 + TPLINK_BOARD_ID := TL-WR841NV13 +endef +TARGET_DEVICES += tl-wr841n-v13 + define Device/gl-mt300n-v2 DTS := GL-MT300N-V2 IMAGE_SIZE := 16064k diff --git a/target/linux/ramips/mt7628/config-4.4 b/target/linux/ramips/mt7628/config-4.4 index 1dd8c75824..4b1bddb3c8 100644 --- a/target/linux/ramips/mt7628/config-4.4 +++ b/target/linux/ramips/mt7628/config-4.4 @@ -138,6 +138,7 @@ CONFIG_MTD_NAND_MT7620=y CONFIG_MTD_PHYSMAP=y CONFIG_MTD_SPI_NOR=y CONFIG_MTD_SPLIT_FIRMWARE=y +CONFIG_MTD_SPLIT_TPLINK_FW=y CONFIG_MTD_SPLIT_TRX_FW=y CONFIG_MTD_SPLIT_UIMAGE_FW=y CONFIG_NEED_DMA_MAP_STATE=y @@ -191,6 +192,7 @@ CONFIG_SPI_MT7621=y # CONFIG_SPI_RT2880 is not set CONFIG_SRCU=y CONFIG_SWCONFIG=y +CONFIG_SWCONFIG_LEDS=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_SYS_HAS_CPU_MIPS32_R1=y CONFIG_SYS_HAS_CPU_MIPS32_R2=y diff --git a/target/linux/ramips/mt7628/config-4.9 b/target/linux/ramips/mt7628/config-4.9 index 0c6026c9f7..23ee65cd1e 100644 --- a/target/linux/ramips/mt7628/config-4.9 +++ b/target/linux/ramips/mt7628/config-4.9 @@ -140,6 +140,7 @@ CONFIG_MTD_M25P80=y CONFIG_MTD_PHYSMAP=y CONFIG_MTD_SPI_NOR=y CONFIG_MTD_SPLIT_FIRMWARE=y +CONFIG_MTD_SPLIT_TPLINK_FW=y CONFIG_MTD_SPLIT_TRX_FW=y CONFIG_MTD_SPLIT_UIMAGE_FW=y CONFIG_NEED_DMA_MAP_STATE=y @@ -193,6 +194,7 @@ CONFIG_SPI_MT7621=y # CONFIG_SPI_RT2880 is not set CONFIG_SRCU=y CONFIG_SWCONFIG=y +CONFIG_SWCONFIG_LEDS=y CONFIG_SWPHY=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_SYS_HAS_CPU_MIPS32_R1=y diff --git a/tools/firmware-utils/src/mktplinkfw2.c b/tools/firmware-utils/src/mktplinkfw2.c index b6dd670b90..14c5a492b7 100644 --- a/tools/firmware-utils/src/mktplinkfw2.c +++ b/tools/firmware-utils/src/mktplinkfw2.c @@ -207,6 +207,22 @@ static struct board_info boards[] = { .layout_id = "8MLmtk", .hdr_ver = 3, .endian_swap = true, + }, { + .id = "TL-WR840NV4", + .hw_id = 0x08400004, + .hw_rev = 0x1, + .hw_ver_add = 0x4, + .layout_id = "8Mmtk", + .hdr_ver = 3, + .endian_swap = true, + }, { + .id = "TL-WR841NV13", + .hw_id = 0x08410013, + .hw_rev = 0x268, + .hw_ver_add = 0x13, + .layout_id = "8Mmtk", + .hdr_ver = 3, + .endian_swap = true, }, { /* terminating entry */ }