From b23b0fb28b760ce66a8f93d4681c8bd300d75d30 Mon Sep 17 00:00:00 2001 From: Paul Wassi Date: Fri, 10 Nov 2017 22:18:09 +0100 Subject: [PATCH] ar71xx: add support for TP-Link TL-WR810N v2 TP-Link TL-WR810N v2 is a compact Wi-Fi router with two Ethernet ports. Specification: - QCA9533 (650 MHz) - 32 MB RAM - 8 MB Flash - 300 Mbps Wi-Fi 2.4 GHz - 2x 10/100 Mbps Ethernet (eth0, eth1) - UART on testpads on PCB - 1x LED (GPIO-controlled) - 1x reset/WPS button - 1x slide-switch with 2 GPIO inputs Flash instructions: - Flash as regular firmware update in Web UI - Default: 192.168.0.254 / admin / admin - Select *-factory.bin When holding reset button during power-up, U-Boot requests a file 'wr810nv1_tp_recovery.bin' from TFTP server at 192.168.0.66 Signed-off-by: Paul Wassi --- .../ar71xx/base-files/etc/board.d/02_network | 1 + target/linux/ar71xx/base-files/etc/diag.sh | 1 + target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 ++ .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + target/linux/ar71xx/config-4.4 | 1 + target/linux/ar71xx/config-4.9 | 1 + .../files/arch/mips/ath79/Kconfig.openwrt | 9 +++++ .../ar71xx/files/arch/mips/ath79/Makefile | 1 + .../files/arch/mips/ath79/mach-tl-wr810n.c | 40 +++++++++++++------ .../ar71xx/files/arch/mips/ath79/machtypes.h | 1 + target/linux/ar71xx/image/tp-link.mk | 10 ++++- 11 files changed, 55 insertions(+), 14 deletions(-) diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network index 78e04627ac..f8060f401c 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -157,6 +157,7 @@ ar71xx_setup_interfaces() tl-wr710n|\ tl-wr720n-v3|\ tl-wr810n|\ + tl-wr810n-v2|\ wpe72|\ wrtnode2q) ucidef_set_interfaces_lan_wan "eth1" "eth0" diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh index 42edd0233b..e767eec520 100644 --- a/target/linux/ar71xx/base-files/etc/diag.sh +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -423,6 +423,7 @@ get_status_led() { tl-wr720n-v3|\ tl-wr802n-v1|\ tl-wr810n|\ + tl-wr810n-v2|\ tl-wr940n-v4|\ tl-wr941nd-v6) status_led="tp-link:blue:system" diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index fd3f94d220..7c381c00f3 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -1160,6 +1160,9 @@ ar71xx_board_detect() { *"TL-WR810N") name="tl-wr810n" ;; + *"TL-WR810N v2") + name="tl-wr810n-v2" + ;; *"TL-WR840N v2") name="tl-wr840n-v2" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index c798ebe843..210e4a2970 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -443,6 +443,7 @@ platform_check_image() { tl-wr802n-v1|\ tl-wr802n-v2|\ tl-wr810n|\ + tl-wr810n-v2|\ tl-wr840n-v2|\ tl-wr840n-v3|\ tl-wr841n-v1|\ diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 index 200a592940..3ce80f2d84 100644 --- a/target/linux/ar71xx/config-4.4 +++ b/target/linux/ar71xx/config-4.4 @@ -210,6 +210,7 @@ CONFIG_ATH79_MACH_TL_WR741ND_V4=y CONFIG_ATH79_MACH_TL_WR802N_V1=y CONFIG_ATH79_MACH_TL_WR802N_V2=y CONFIG_ATH79_MACH_TL_WR810N=y +CONFIG_ATH79_MACH_TL_WR810N_V2=y CONFIG_ATH79_MACH_TL_WR840N_V2=y CONFIG_ATH79_MACH_TL_WR841N_V1=y CONFIG_ATH79_MACH_TL_WR841N_V8=y diff --git a/target/linux/ar71xx/config-4.9 b/target/linux/ar71xx/config-4.9 index 78668e0949..88d2c6eebe 100644 --- a/target/linux/ar71xx/config-4.9 +++ b/target/linux/ar71xx/config-4.9 @@ -208,6 +208,7 @@ CONFIG_ATH79_MACH_TL_WR741ND_V4=y CONFIG_ATH79_MACH_TL_WR802N_V1=y CONFIG_ATH79_MACH_TL_WR802N_V2=y CONFIG_ATH79_MACH_TL_WR810N=y +CONFIG_ATH79_MACH_TL_WR810N_V2=y CONFIG_ATH79_MACH_TL_WR840N_V2=y CONFIG_ATH79_MACH_TL_WR841N_V1=y CONFIG_ATH79_MACH_TL_WR841N_V8=y diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt index 453893a62e..0380b09c71 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt @@ -1702,6 +1702,15 @@ config ATH79_MACH_TL_WR810N select ATH79_DEV_USB select ATH79_DEV_WMAC +config ATH79_MACH_TL_WR810N_V2 + bool "TP-LINK TL-WR810N v2 support" + select SOC_QCA953X + select ATH79_DEV_ETH + select ATH79_DEV_GPIO_BUTTONS + select ATH79_DEV_LEDS_GPIO + select ATH79_DEV_M25P80 + select ATH79_DEV_WMAC + config ATH79_MACH_TL_WR840N_V2 bool "TP-LINK TL-WR840N v2/v3 support" select SOC_QCA953X diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile index 529e0b81b1..23cb881c4c 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile @@ -217,6 +217,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WR741ND_V4) += mach-tl-wr741nd-v4.o obj-$(CONFIG_ATH79_MACH_TL_WR802N_V1) += mach-tl-wr802n.o obj-$(CONFIG_ATH79_MACH_TL_WR802N_V2) += mach-tl-wr802n-v2.o obj-$(CONFIG_ATH79_MACH_TL_WR810N) += mach-tl-wr810n.o +obj-$(CONFIG_ATH79_MACH_TL_WR810N_V2) += mach-tl-wr810n.o obj-$(CONFIG_ATH79_MACH_TL_WR840N_V2) += mach-tl-wr841n-v9.o obj-$(CONFIG_ATH79_MACH_TL_WR841N_V1) += mach-tl-wr841n.o obj-$(CONFIG_ATH79_MACH_TL_WR841N_V8) += mach-tl-wr841n-v8.o diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr810n.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr810n.c index 906c5f8d4d..588bb9d861 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr810n.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr810n.c @@ -88,27 +88,20 @@ static struct gpio_keys_button tl_wr810n_gpio_keys[] __initdata = { }, }; -static void __init tl_wr810n_setup(void) +static void __init tl_ap143_setup(int lan_mac_offset) { u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); - ath79_setup_ar933x_phy4_switch(false, false); - ath79_register_m25p80(&tl_wr810n_flash_data); - ath79_register_leds_gpio(-1, - ARRAY_SIZE(tl_wr810n_leds_gpio), - tl_wr810n_leds_gpio); - ath79_register_gpio_keys_polled(-1, - TL_WR810N_KEYS_POLL_INTERVAL, - ARRAY_SIZE(tl_wr810n_gpio_keys), - tl_wr810n_gpio_keys); + + ath79_setup_ar933x_phy4_switch(false, false); ath79_register_mdio(0, 0x0); /* WAN */ - ath79_eth0_data.duplex = DUPLEX_FULL; ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; + ath79_eth0_data.duplex = DUPLEX_FULL; ath79_eth0_data.speed = SPEED_100; ath79_eth0_data.phy_mask = BIT(4); ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1); @@ -116,20 +109,41 @@ static void __init tl_wr810n_setup(void) /* LAN */ ath79_switch_data.phy4_mii_en = 1; - ath79_eth1_data.duplex = DUPLEX_FULL; ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; + ath79_eth1_data.duplex = DUPLEX_FULL; ath79_eth1_data.speed = SPEED_1000; ath79_switch_data.phy_poll_mask |= BIT(4); - ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1); + ath79_init_mac(ath79_eth1_data.mac_addr, mac, lan_mac_offset); ath79_register_eth(1); ath79_register_wmac(art + TL_WR810N_WMAC_CALDATA_OFFSET, mac); + ath79_register_leds_gpio(-1, + ARRAY_SIZE(tl_wr810n_leds_gpio), + tl_wr810n_leds_gpio); + ath79_register_gpio_keys_polled(-1, + TL_WR810N_KEYS_POLL_INTERVAL, + ARRAY_SIZE(tl_wr810n_gpio_keys), + tl_wr810n_gpio_keys); +} + +static void __init tl_wr810n_setup(void) +{ + tl_ap143_setup(-1); + gpio_request_one(TL_WR810N_GPIO_USB_POWER, GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, "USB power"); ath79_register_usb(); } +static void __init tl_wr810n_v2_setup(void) +{ + tl_ap143_setup(0); +} + MIPS_MACHINE(ATH79_MACH_TL_WR810N, "TL-WR810N", "TP-LINK TL-WR810N", tl_wr810n_setup); + +MIPS_MACHINE(ATH79_MACH_TL_WR810N_V2, "TL-WR810N-v2", "TP-LINK TL-WR810N v2", + tl_wr810n_v2_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h index ce878b291b..a08e3a93d9 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h @@ -259,6 +259,7 @@ enum ath79_mach_type { ATH79_MACH_TL_WR802N_V1, /* TP-LINK TL-WR802N v1 */ ATH79_MACH_TL_WR802N_V2, /* TP-LINK TL-WR802N v2 */ ATH79_MACH_TL_WR810N, /* TP-LINK TL-WR810N */ + ATH79_MACH_TL_WR810N_V2, /* TP-LINK TL-WR810N v2 */ ATH79_MACH_TL_WR840N_V2, /* TP-LINK TL-WR840N v2 */ ATH79_MACH_TL_WR840N_V3, /* TP-LINK TL-WR840N v3 */ ATH79_MACH_TL_WR841N_V1, /* TP-LINK TL-WR841N v1 */ diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk index f311858986..18c50cf20f 100644 --- a/target/linux/ar71xx/image/tp-link.mk +++ b/target/linux/ar71xx/image/tp-link.mk @@ -888,6 +888,14 @@ define Device/tl-wr810n-v1 TPLINK_HWID := 0x08100001 endef +define Device/tl-wr810n-v2 + $(Device/tplink-8mlzma) + DEVICE_TITLE := TP-LINK TL-WR810N v2 + BOARDNAME := TL-WR810N-v2 + DEVICE_PROFILE := TLWR810 + TPLINK_HWID := 0x08100002 +endef + define Device/tl-wr840n-v2 $(Device/tplink-4mlzma) DEVICE_TITLE := TP-LINK TL-WR840N v2 @@ -904,7 +912,7 @@ define Device/tl-wr840n-v3 BOARDNAME := TL-WR840N-v3 TPLINK_HWID := 0x08400003 endef -TARGET_DEVICES += tl-wr802n-v1 tl-wr802n-v2 tl-wr810n-v1 tl-wr840n-v2 tl-wr840n-v3 +TARGET_DEVICES += tl-wr802n-v1 tl-wr802n-v2 tl-wr810n-v1 tl-wr810n-v2 tl-wr840n-v2 tl-wr840n-v3 define Device/tl-wr841-v1.5 $(Device/tplink-4m) -- 2.25.1