From: Robert Marko Date: Wed, 21 Feb 2018 13:15:17 +0100 Subject: ar71xx: add support for TP-Link TL-WR940N v6 Add support for TL-WR940N v6 board. It is pretty much the same as v5 except they only left WAN LED and removed other ones. Installation: flash factory image through WEB UI or use TFTP. Signed-off-by: Robert Marko diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds index 47b90d9cb2f81936aed22cdf7d1f6d870d23c16e..47bd0998f9d3fc73c3f605ab3ffd8167b719036b 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds @@ -656,6 +656,9 @@ tl-wr941nd-v6) ucidef_set_led_switch "lan4" "LAN4" "tp-link:blue:lan4" "switch0" "0x02" ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt" ;; +tl-wr940n-v6) + ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth0" + ;; tl-wr841n-v9|\ tl-wr841n-v11|\ tl-wr842n-v3) 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 86ac949bca12561536ce2c8adb190eb004c162e4..b769af63ca7b6c88e4df00782c512df95ee4c4a0 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -285,6 +285,7 @@ ar71xx_setup_interfaces() tl-wdr6500-v2|\ tl-wr841n-v8|\ tl-wr940n-v4|\ + tl-wr940n-v6|\ tl-wr941nd-v5|\ tl-wr941nd-v6|\ wnr1000-v2|\ diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh index 97372bed0ea2fadfab10f22916a1e0d6a9c65725..40717eb07e5227dab7603c42aa2af8daf9a59e2b 100644 --- a/target/linux/ar71xx/base-files/etc/diag.sh +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -394,6 +394,9 @@ get_status_led() { tl-wr941nd-v6) status_led="tp-link:blue:system" ;; + tl-wr940n-v6) + status_led="tp-link:orange:diag" + ;; tl-wr841n-v9) status_led="tp-link:green:qss" ;; diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index b7d6e2fcdf2f3ba971141a5a6fc1d2f430350847..d02028278b6a2a98763ad8c605883c465cd7f3bd 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -1091,6 +1091,9 @@ ar71xx_board_detect() { *TL-WR941ND) name="tl-wr941nd" ;; + *"TL-WR940N v6") + name="tl-wr940n-v6" + ;; *"TL-WR941N/ND v5") name="tl-wr941nd-v5" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index d6650e7719d268e1a500638b7eda2e15b9251aea..9e6875dc3726fc6c98fb9e34978b2d13ac07fb30 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -440,6 +440,7 @@ platform_check_image() { tl-wr941nd-v5|\ tl-wr941nd-v6|\ tl-wr940n-v4|\ + tl-wr940n-v6|\ tl-wr941nd) local magic_ver="0100" diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr940n-v4.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr940n-v4.c index d693b947c843d2a74cd252503fa8bf68b20da4ab..b530622d9f00b8ce3b906ad5fe62de019d82763a 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr940n-v4.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr940n-v4.c @@ -1,5 +1,5 @@ /* - * TP-LINK TL-WR940N v4 board support + * TP-LINK TL-WR940N v4 and v6 board support * * Copyright (C) 2016 David Lutz * @@ -32,12 +32,15 @@ #define TL_WR940N_V4_GPIO_LED_LAN1 8 #define TL_WR940N_V4_GPIO_LED_WLAN 7 #define TL_WR940N_V4_GPIO_LED_SYSTEM 5 +/* WR940N v6 specific GPIO*/ +#define TL_WR940N_V6_GPIO_LED_DIAG_ORANGE 15 +#define TL_WR940N_V6_GPIO_LED_WAN_BLUE 14 #define TL_WR940N_V4_GPIO_BTN_RESET 1 #define TL_WR940N_V4_GPIO_BTN_RFKILL 2 -#define TL_WR940N_V4_KEYS_POLL_INTERVAL 20 -#define TL_WR940N_V4_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR940N_V4_KEYS_POLL_INTERVAL) +#define TL_WR940N_KEYS_POLL_INTERVAL 20 +#define TL_WR940N_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR940N_KEYS_POLL_INTERVAL) static struct gpio_led tl_wr940n_v4_leds_gpio[] __initdata = { @@ -93,43 +96,49 @@ static struct gpio_keys_button tl_wr940n_v4_gpio_keys[] __initdata = { .desc = "Reset button", .type = EV_KEY, .code = KEY_RESTART, - .debounce_interval = TL_WR940N_V4_KEYS_DEBOUNCE_INTERVAL, + .debounce_interval = TL_WR940N_KEYS_DEBOUNCE_INTERVAL, .gpio = TL_WR940N_V4_GPIO_BTN_RESET, .active_low = 1, }, { .desc = "RFKILL button", .type = EV_KEY, .code = KEY_RFKILL, - .debounce_interval = TL_WR940N_V4_KEYS_DEBOUNCE_INTERVAL, + .debounce_interval = TL_WR940N_KEYS_DEBOUNCE_INTERVAL, .gpio = TL_WR940N_V4_GPIO_BTN_RFKILL, .active_low = 1, } }; +static struct gpio_led tl_wr940n_v6_leds_gpio[] __initdata = { + { + .name = "tp-link:blue:wan", + .gpio = TL_WR940N_V6_GPIO_LED_WAN_BLUE, + .active_low = 1, + }, + { + .name = "tp-link:orange:diag", + .gpio = TL_WR940N_V6_GPIO_LED_DIAG_ORANGE, + .active_low = 0, + }, +}; + -static const char *tl_wr940n_v4_part_probes[] = { +static const char *tl_wr940n_part_probes[] = { "tp-link", NULL, }; -static struct flash_platform_data tl_wr940n_v4_flash_data = { - .part_probes = tl_wr940n_v4_part_probes, +static struct flash_platform_data tl_wr940n_flash_data = { + .part_probes = tl_wr940n_part_probes, }; -static void __init tl_wr940n_v4_setup(void) +static void __init tl_wr940n_setup(void) { u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); - ath79_register_m25p80(&tl_wr940n_v4_flash_data); - - ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr940n_v4_leds_gpio), - tl_wr940n_v4_leds_gpio); - - ath79_register_gpio_keys_polled(-1, TL_WR940N_V4_KEYS_POLL_INTERVAL, - ARRAY_SIZE(tl_wr940n_v4_gpio_keys), - tl_wr940n_v4_gpio_keys); + ath79_register_m25p80(&tl_wr940n_flash_data); ath79_register_mdio(0, 0x0); @@ -145,5 +154,31 @@ static void __init tl_wr940n_v4_setup(void) } +static void __init tl_wr940n_v4_setup(void) +{ + tl_wr940n_setup(); + + ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr940n_v4_leds_gpio), + tl_wr940n_v4_leds_gpio); + + ath79_register_gpio_keys_polled(-1, TL_WR940N_KEYS_POLL_INTERVAL, + ARRAY_SIZE(tl_wr940n_v4_gpio_keys), + tl_wr940n_v4_gpio_keys); +} + +static void __init tl_wr940n_v6_setup(void) +{ + tl_wr940n_setup(); + + ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr940n_v6_leds_gpio), + tl_wr940n_v6_leds_gpio); + + ath79_register_gpio_keys_polled(-1, TL_WR940N_KEYS_POLL_INTERVAL, + ARRAY_SIZE(tl_wr940n_v4_gpio_keys), + tl_wr940n_v4_gpio_keys); +} + MIPS_MACHINE(ATH79_MACH_TL_WR940N_V4, "TL-WR940N-v4", "TP-LINK TL-WR940N v4", tl_wr940n_v4_setup); +MIPS_MACHINE(ATH79_MACH_TL_WR940N_V6, "TL-WR940N-v6", "TP-LINK TL-WR940N v6", + tl_wr940n_v6_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h index e4623fd08836d59ad4e79e96f02e75e502a55ca6..c4a6eb6a898ca4400677cff9112950a34df671b2 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h @@ -238,6 +238,7 @@ enum ath79_mach_type { ATH79_MACH_TL_WR941ND_V5, /* TP-LINK TL-WR941ND v5 */ ATH79_MACH_TL_WR941ND_V6, /* TP-LINK TL-WR941ND v6 */ ATH79_MACH_TL_WR940N_V4, /* TP-LINK TL-WR940N v4 */ + ATH79_MACH_TL_WR940N_V6, /* TP-LINK TL-WR940N v6 */ ATH79_MACH_TUBE2H, /* Alfa Network Tube2H */ ATH79_MACH_UBNT_AIRGW, /* Ubiquiti AirGateway */ ATH79_MACH_UBNT_AIRGWP, /* Ubiquiti AirGateway Pro */ diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk index 27d6c73454aef96e5da47033ec664d2caffca1d5..13197be6325c7de2f0a77e44203cf387b87e3eb6 100644 --- a/target/linux/ar71xx/image/tp-link.mk +++ b/target/linux/ar71xx/image/tp-link.mk @@ -812,6 +812,14 @@ define Device/tl-wr940n-v4 IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU endef +define Device/tl-wr940n-v6 + $(Device/tl-wr940n-v4) + DEVICE_TITLE := TP-LINK TL-WR940N v6 + BOARDNAME := TL-WR940N-v6 + TPLINK_HWID := 0x09400006 +endef +TARGET_DEVICES += tl-wr940n-v6 + # Chinese version (unlike European) is similar to the TL-WDR3500 define Device/tl-wr941nd-v6-cn $(Device/tplink-4mlzma)