diff mbox

[OpenWrt-Devel] ar71xx: fix TP-LINK TL-WR941ND v6 support

Message ID e87ef2eb25c510165aaa0f7be290d78d2d0c4b99.1438821655.git.mschiffer@universe-factory.net
State Changes Requested
Headers show

Commit Message

Matthias Schiffer Aug. 6, 2015, 12:40 a.m. UTC
The images currently generated for the TL-WR941ND v6 try to treat it like
a TL-WDR3500, which doesn't make any sense and causes the kernel to panic
in early boot. I don't think this has ever worked (the TL-WR941ND v6 has
a different SoC, uses another MDIO bus, has only one WMAC and no USB...).

Fix this by adding proper support for the device.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
---
 target/linux/ar71xx/base-files/etc/diag.sh         |   3 +-
 .../ar71xx/base-files/etc/uci-defaults/01_leds     |   9 ++
 .../ar71xx/base-files/etc/uci-defaults/02_network  |   1 +
 target/linux/ar71xx/base-files/lib/ar71xx.sh       |   3 +
 .../ar71xx/base-files/lib/upgrade/platform.sh      |   1 +
 target/linux/ar71xx/config-4.1                     |   1 +
 .../files/arch/mips/ath79/mach-tl-wr941nd-v6.c     | 151 +++++++++++++++++++++
 target/linux/ar71xx/image/Makefile                 |   2 +-
 .../700-MIPS-ath79-openwrt-machines.patch          |  23 +++-
 9 files changed, 186 insertions(+), 8 deletions(-)
 create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c

Comments

Chuanhong Guo Aug. 6, 2015, 2:32 a.m. UTC | #1
In fact there is a model called TL-WR941N v6 which sells in China.It
uses AR9344 SoC and AR9381 for 450M wireless.It's just a mistake made
by the patch submitter to call it wr941nd-v6.I think you should rename
the old profile and create a new one:D

2015-08-06 8:40 GMT+08:00 Matthias Schiffer <mschiffer@universe-factory.net>:
> The images currently generated for the TL-WR941ND v6 try to treat it like
> a TL-WDR3500, which doesn't make any sense and causes the kernel to panic
> in early boot. I don't think this has ever worked (the TL-WR941ND v6 has
> a different SoC, uses another MDIO bus, has only one WMAC and no USB...).
>
> Fix this by adding proper support for the device.
>
> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
> ---
>  target/linux/ar71xx/base-files/etc/diag.sh         |   3 +-
>  .../ar71xx/base-files/etc/uci-defaults/01_leds     |   9 ++
>  .../ar71xx/base-files/etc/uci-defaults/02_network  |   1 +
>  target/linux/ar71xx/base-files/lib/ar71xx.sh       |   3 +
>  .../ar71xx/base-files/lib/upgrade/platform.sh      |   1 +
>  target/linux/ar71xx/config-4.1                     |   1 +
>  .../files/arch/mips/ath79/mach-tl-wr941nd-v6.c     | 151 +++++++++++++++++++++
>  target/linux/ar71xx/image/Makefile                 |   2 +-
>  .../700-MIPS-ath79-openwrt-machines.patch          |  23 +++-
>  9 files changed, 186 insertions(+), 8 deletions(-)
>  create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
>
> diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
> index 561c5da..46b83fc 100644
> --- a/target/linux/ar71xx/base-files/etc/diag.sh
> +++ b/target/linux/ar71xx/base-files/etc/diag.sh
> @@ -277,7 +277,8 @@ get_status_led() {
>         tl-wdr4300 | \
>         tl-wr703n | \
>         tl-wr710n | \
> -       tl-wr720n-v3)
> +       tl-wr720n-v3 | \
> +       tl-wr941nd-v6)
>                 status_led="tp-link:blue:system"
>                 ;;
>         tl-wr841n-v9)
> diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
> index 2aced37..3344d97 100644
> --- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
> +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
> @@ -474,6 +474,15 @@ tl-wr941nd-v5)
>         ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
>         ;;
>
> +tl-wr941nd-v6)
> +       ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth0"
> +       ucidef_set_led_switch "lan1" "LAN1" "tp-link:blue:lan1" "switch0" "0x10"
> +       ucidef_set_led_switch "lan2" "LAN2" "tp-link:blue:lan2" "switch0" "0x08"
> +       ucidef_set_led_switch "lan3" "LAN3" "tp-link:blue:lan3" "switch0" "0x04"
> +       ucidef_set_led_switch "lan4" "LAN4" "tp-link:blue:lan4" "switch0" "0x02"
> +       ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt"
> +       ;;
> +
>  tl-wa830re-v2)
>         ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
>         ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
> diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
> index 2893e62..a6507db 100755
> --- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
> +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
> @@ -227,6 +227,7 @@ tl-mr3420-v2 |\
>  tl-wr841n-v8 |\
>  tl-wr842n-v2 |\
>  tl-wr941nd-v5 |\
> +tl-wr941nd-v6 |\
>  wnr2000-v3 |\
>  wnr2000-v4 |\
>  wnr2200 |\
> diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> index 256bd10..5d27538 100755
> --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
> +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> @@ -793,6 +793,9 @@ ar71xx_board_detect() {
>         *"TL-WR941N/ND v5")
>                 name="tl-wr941nd-v5"
>                 ;;
> +       *"TL-WR941N/ND v6")
> +               name="tl-wr941nd-v6"
> +               ;;
>         *"TL-WR703N v1")
>                 name="tl-wr703n"
>                 ;;
> diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> index 76d8c5b..55ff568 100755
> --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> @@ -353,6 +353,7 @@ platform_check_image() {
>         tl-wr842n-v2 | \
>         tl-wr941nd | \
>         tl-wr941nd-v5 | \
> +       tl-wr941nd-v6 | \
>         tl-wr1041n-v2 | \
>         tl-wr1043nd | \
>         tl-wr1043nd-v2 | \
> diff --git a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1
> index 1e31a01..ecaf454 100644
> --- a/target/linux/ar71xx/config-4.1
> +++ b/target/linux/ar71xx/config-4.1
> @@ -134,6 +134,7 @@ CONFIG_ATH79_MACH_TL_WR841N_V1=y
>  CONFIG_ATH79_MACH_TL_WR841N_V8=y
>  CONFIG_ATH79_MACH_TL_WR841N_V9=y
>  CONFIG_ATH79_MACH_TL_WR941ND=y
> +CONFIG_ATH79_MACH_TL_WR941ND_V6=y
>  CONFIG_ATH79_MACH_TUBE2H=y
>  CONFIG_ATH79_MACH_UBNT=y
>  CONFIG_ATH79_MACH_UBNT_XM=y
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
> new file mode 100644
> index 0000000..c5fc9fc
> --- /dev/null
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
> @@ -0,0 +1,151 @@
> +/*
> + *  TP-LINK TL-WR941N/ND v6 board support
> + *
> + *  Copyright (C) 2015 Matthias Schiffer <mschiffer@universe-factory.net>
> + *
> + *  This program is free software; you can redistribute it and/or modify it
> + *  under the terms of the GNU General Public License version 2 as published
> + *  by the Free Software Foundation.
> + */
> +
> +#include <linux/gpio.h>
> +#include <linux/platform_device.h>
> +
> +#include <asm/mach-ath79/ath79.h>
> +#include <asm/mach-ath79/ar71xx_regs.h>
> +
> +#include "common.h"
> +#include "dev-eth.h"
> +#include "dev-gpio-buttons.h"
> +#include "dev-leds-gpio.h"
> +#include "dev-m25p80.h"
> +#include "dev-wmac.h"
> +#include "machtypes.h"
> +
> +
> +#define TL_WR941ND_V6_GPIO_LED_QSS             3
> +#define TL_WR941ND_V6_GPIO_LED_WAN             14
> +#define TL_WR941ND_V6_GPIO_LED_WAN_RED         15
> +#define TL_WR941ND_V6_GPIO_LED_LAN1            7
> +#define TL_WR941ND_V6_GPIO_LED_LAN2            6
> +#define TL_WR941ND_V6_GPIO_LED_LAN3            5
> +#define TL_WR941ND_V6_GPIO_LED_LAN4            4
> +#define TL_WR941ND_V6_GPIO_LED_WLAN            8
> +#define TL_WR941ND_V6_GPIO_LED_SYSTEM          18
> +
> +#define TL_WR941ND_V6_GPIO_BTN_RESET           1
> +#define TL_WR941ND_V6_GPIO_BTN_RFKILL          2
> +
> +#define TL_WR941ND_V6_KEYS_POLL_INTERVAL       20
> +#define TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL   (3 * TL_WR941ND_V6_KEYS_POLL_INTERVAL)
> +
> +
> +static struct gpio_led tl_wr941nd_v6_leds_gpio[] __initdata = {
> +       {
> +               .name           = "tp-link:blue:qss",
> +               .gpio           = TL_WR941ND_V6_GPIO_LED_QSS,
> +               .active_low     = 1,
> +       },
> +       {
> +               .name           = "tp-link:blue:wan",
> +               .gpio           = TL_WR941ND_V6_GPIO_LED_WAN,
> +               .active_low     = 1,
> +       },
> +       {
> +               .name           = "tp-link:red:wan",
> +               .gpio           = TL_WR941ND_V6_GPIO_LED_WAN_RED,
> +               .active_low     = 0,
> +       },
> +       {
> +               .name           = "tp-link:blue:lan1",
> +               .gpio           = TL_WR941ND_V6_GPIO_LED_LAN1,
> +               .active_low     = 1,
> +       },
> +       {
> +               .name           = "tp-link:blue:lan2",
> +               .gpio           = TL_WR941ND_V6_GPIO_LED_LAN2,
> +               .active_low     = 1,
> +       },
> +       {
> +               .name           = "tp-link:blue:lan3",
> +               .gpio           = TL_WR941ND_V6_GPIO_LED_LAN3,
> +               .active_low     = 1,
> +       },
> +       {
> +               .name           = "tp-link:blue:lan4",
> +               .gpio           = TL_WR941ND_V6_GPIO_LED_LAN4,
> +               .active_low     = 1,
> +       },
> +       {
> +               .name           = "tp-link:blue:wlan",
> +               .gpio           = TL_WR941ND_V6_GPIO_LED_WLAN,
> +               .active_low     = 1,
> +       },
> +       {
> +               .name           = "tp-link:blue:system",
> +               .gpio           = TL_WR941ND_V6_GPIO_LED_SYSTEM,
> +               .active_low     = 1,
> +       },
> +};
> +
> +static struct gpio_keys_button tl_wr941nd_v6_gpio_keys[] __initdata = {
> +       {
> +               .desc           = "Reset button",
> +               .type           = EV_KEY,
> +               .code           = KEY_RESTART,
> +               .debounce_interval = TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL,
> +               .gpio           = TL_WR941ND_V6_GPIO_BTN_RESET,
> +               .active_low     = 1,
> +       }, {
> +               .desc           = "RFKILL button",
> +               .type           = EV_KEY,
> +               .code           = KEY_RFKILL,
> +               .debounce_interval = TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL,
> +               .gpio           = TL_WR941ND_V6_GPIO_BTN_RFKILL,
> +               .active_low     = 1,
> +       }
> +};
> +
> +
> +static const char *tl_wr941n_v6_part_probes[] = {
> +       "tp-link",
> +       NULL,
> +};
> +
> +static struct flash_platform_data tl_wr941n_v6_flash_data = {
> +       .part_probes    = tl_wr941n_v6_part_probes,
> +};
> +
> +
> +static void __init tl_wr941nd_v6_setup(void)
> +{
> +       u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
> +       u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
> +
> +       ath79_register_m25p80(&tl_wr941n_v6_flash_data);
> +
> +       ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr941nd_v6_leds_gpio),
> +                                tl_wr941nd_v6_leds_gpio);
> +
> +       ath79_register_gpio_keys_polled(-1, TL_WR941ND_V6_KEYS_POLL_INTERVAL,
> +                                       ARRAY_SIZE(tl_wr941nd_v6_gpio_keys),
> +                                       tl_wr941nd_v6_gpio_keys);
> +
> +       ath79_register_mdio(0, 0x0);
> +
> +       ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
> +       ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
> +
> +       ath79_switch_data.phy4_mii_en = 1;
> +       ath79_switch_data.phy_poll_mask = BIT(0);
> +       ath79_eth0_data.phy_mask = BIT(0);
> +
> +       ath79_register_eth(0);
> +       ath79_register_eth(1);
> +
> +       ath79_register_wmac(ee, mac);
> +
> +}
> +
> +MIPS_MACHINE(ATH79_MACH_TL_WR941ND_V6, "TL-WR941ND-v6", "TP-LINK TL-WR941N/ND v6",
> +            tl_wr941nd_v6_setup);
> diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
> index e894d78..f9e0087 100644
> --- a/target/linux/ar71xx/image/Makefile
> +++ b/target/linux/ar71xx/image/Makefile
> @@ -620,7 +620,7 @@ endef
>
>  define Device/tl-wr941nd-v6
>      $(Device/tplink-4mlzma)
> -    BOARDNAME := TL-WDR3500
> +    BOARDNAME := TL-WR941ND-v6
>      DEVICE_PROFILE := TLWR941
>      TPLINK_HWID := 0x09410006
>  endef
> diff --git a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
> index 02ebd1b..558d43c 100644
> --- a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
> +++ b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
> @@ -1,6 +1,6 @@
>  --- a/arch/mips/ath79/machtypes.h
>  +++ b/arch/mips/ath79/machtypes.h
> -@@ -16,24 +16,207 @@
> +@@ -16,24 +16,208 @@
>
>   enum ath79_mach_type {
>         ATH79_MACH_GENERIC = 0,
> @@ -157,6 +157,7 @@
>  +      ATH79_MACH_TL_WR842N_V2,        /* TP-LINK TL-WR842N/ND v2 */
>  +      ATH79_MACH_TL_WR941ND,          /* TP-LINK TL-WR941ND */
>  +      ATH79_MACH_TL_WR941ND_V5,       /* TP-LINK TL-WR941ND v5 */
> ++      ATH79_MACH_TL_WR941ND_V6,       /* TP-LINK TL-WR941ND v6 */
>  +      ATH79_MACH_TUBE2H,              /* Alfa Network Tube2H */
>  +      ATH79_MACH_UBNT_AIRGW,          /* Ubiquiti AirGateway */
>         ATH79_MACH_UBNT_AIRROUTER,      /* Ubiquiti AirRouter */
> @@ -301,7 +302,7 @@
>   config ATH79_MACH_AP121
>         bool "Atheros AP121 reference board"
>         select SOC_AR933X
> -@@ -11,62 +95,1107 @@ config ATH79_MACH_AP121
> +@@ -11,62 +95,1116 @@ config ATH79_MACH_AP121
>         select ATH79_DEV_M25P80
>         select ATH79_DEV_USB
>         select ATH79_DEV_WMAC
> @@ -1342,6 +1343,15 @@
>  +      select ATH79_DEV_M25P80
>  +      select ATH79_DEV_WMAC
>  +
> ++config ATH79_MACH_TL_WR941ND_V6
> ++       bool "TP-LINK TL-WR941ND v6 support"
> ++       select SOC_QCA956X
> ++       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_WR1041N_V2
>  +      bool "TP-LINK TL-WR1041N v2 support"
>  +      select SOC_AR934X
> @@ -1437,7 +1447,7 @@
>
>   config ATH79_MACH_UBNT_XM
>         bool "Ubiquiti Networks XM/UniFi boards"
> -@@ -83,6 +1212,97 @@ config ATH79_MACH_UBNT_XM
> +@@ -83,6 +1221,97 @@ config ATH79_MACH_UBNT_XM
>           Say 'Y' here if you want your kernel to support the
>           Ubiquiti Networks XM (rev 1.0) board.
>
> @@ -1535,7 +1545,7 @@
>   endmenu
>
>   config SOC_AR71XX
> -@@ -134,7 +1354,10 @@ config ATH79_DEV_DSA
> +@@ -134,7 +1363,10 @@ config ATH79_DEV_DSA
>   config ATH79_DEV_ETH
>         def_bool n
>
> @@ -1547,7 +1557,7 @@
>         def_bool n
>
>   config ATH79_DEV_GPIO_BUTTONS
> -@@ -164,6 +1387,11 @@ config ATH79_PCI_ATH9K_FIXUP
> +@@ -164,6 +1396,11 @@ config ATH79_PCI_ATH9K_FIXUP
>         def_bool n
>
>   config ATH79_ROUTERBOOT
> @@ -1561,7 +1571,7 @@
>   endif
>  --- a/arch/mips/ath79/Makefile
>  +++ b/arch/mips/ath79/Makefile
> -@@ -38,9 +38,133 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)             += route
> +@@ -38,9 +38,134 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)             += route
>   #
>   # Machines
>   #
> @@ -1661,6 +1671,7 @@
>  +obj-$(CONFIG_ATH79_MACH_TL_WR841N_V8) += mach-tl-wr841n-v8.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR841N_V9) += mach-tl-wr841n-v9.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR941ND)   += mach-tl-wr941nd.o
> ++obj-$(CONFIG_ATH79_MACH_TL_WR941ND_V6)        += mach-tl-wr941nd-v6.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR1041N_V2)        += mach-tl-wr1041n-v2.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR1043ND)  += mach-tl-wr1043nd.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR1043ND_V2)       += mach-tl-wr1043nd-v2.o
> --
> 2.5.0
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
Matthias Schiffer Aug. 6, 2015, 2:55 a.m. UTC | #2
Please ignore this patch for now, the WLAN isn't working correctly, I'll
have a look at that first.

Matthias


On 08/06/2015 02:40 AM, Matthias Schiffer wrote:
> The images currently generated for the TL-WR941ND v6 try to treat it like
> a TL-WDR3500, which doesn't make any sense and causes the kernel to panic
> in early boot. I don't think this has ever worked (the TL-WR941ND v6 has
> a different SoC, uses another MDIO bus, has only one WMAC and no USB...).
> 
> Fix this by adding proper support for the device.
> 
> Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
> ---
>  target/linux/ar71xx/base-files/etc/diag.sh         |   3 +-
>  .../ar71xx/base-files/etc/uci-defaults/01_leds     |   9 ++
>  .../ar71xx/base-files/etc/uci-defaults/02_network  |   1 +
>  target/linux/ar71xx/base-files/lib/ar71xx.sh       |   3 +
>  .../ar71xx/base-files/lib/upgrade/platform.sh      |   1 +
>  target/linux/ar71xx/config-4.1                     |   1 +
>  .../files/arch/mips/ath79/mach-tl-wr941nd-v6.c     | 151 +++++++++++++++++++++
>  target/linux/ar71xx/image/Makefile                 |   2 +-
>  .../700-MIPS-ath79-openwrt-machines.patch          |  23 +++-
>  9 files changed, 186 insertions(+), 8 deletions(-)
>  create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
> 
> diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
> index 561c5da..46b83fc 100644
> --- a/target/linux/ar71xx/base-files/etc/diag.sh
> +++ b/target/linux/ar71xx/base-files/etc/diag.sh
> @@ -277,7 +277,8 @@ get_status_led() {
>  	tl-wdr4300 | \
>  	tl-wr703n | \
>  	tl-wr710n | \
> -	tl-wr720n-v3)
> +	tl-wr720n-v3 | \
> +	tl-wr941nd-v6)
>  		status_led="tp-link:blue:system"
>  		;;
>  	tl-wr841n-v9)
> diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
> index 2aced37..3344d97 100644
> --- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
> +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
> @@ -474,6 +474,15 @@ tl-wr941nd-v5)
>  	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
>  	;;
>  
> +tl-wr941nd-v6)
> +	ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth0"
> +	ucidef_set_led_switch "lan1" "LAN1" "tp-link:blue:lan1" "switch0" "0x10"
> +	ucidef_set_led_switch "lan2" "LAN2" "tp-link:blue:lan2" "switch0" "0x08"
> +	ucidef_set_led_switch "lan3" "LAN3" "tp-link:blue:lan3" "switch0" "0x04"
> +	ucidef_set_led_switch "lan4" "LAN4" "tp-link:blue:lan4" "switch0" "0x02"
> +	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt"
> +	;;
> +
>  tl-wa830re-v2)
>  	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
>  	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
> diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
> index 2893e62..a6507db 100755
> --- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
> +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
> @@ -227,6 +227,7 @@ tl-mr3420-v2 |\
>  tl-wr841n-v8 |\
>  tl-wr842n-v2 |\
>  tl-wr941nd-v5 |\
> +tl-wr941nd-v6 |\
>  wnr2000-v3 |\
>  wnr2000-v4 |\
>  wnr2200 |\
> diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> index 256bd10..5d27538 100755
> --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
> +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> @@ -793,6 +793,9 @@ ar71xx_board_detect() {
>  	*"TL-WR941N/ND v5")
>  		name="tl-wr941nd-v5"
>  		;;
> +	*"TL-WR941N/ND v6")
> +		name="tl-wr941nd-v6"
> +		;;
>  	*"TL-WR703N v1")
>  		name="tl-wr703n"
>  		;;
> diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> index 76d8c5b..55ff568 100755
> --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> @@ -353,6 +353,7 @@ platform_check_image() {
>  	tl-wr842n-v2 | \
>  	tl-wr941nd | \
>  	tl-wr941nd-v5 | \
> +	tl-wr941nd-v6 | \
>  	tl-wr1041n-v2 | \
>  	tl-wr1043nd | \
>  	tl-wr1043nd-v2 | \
> diff --git a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1
> index 1e31a01..ecaf454 100644
> --- a/target/linux/ar71xx/config-4.1
> +++ b/target/linux/ar71xx/config-4.1
> @@ -134,6 +134,7 @@ CONFIG_ATH79_MACH_TL_WR841N_V1=y
>  CONFIG_ATH79_MACH_TL_WR841N_V8=y
>  CONFIG_ATH79_MACH_TL_WR841N_V9=y
>  CONFIG_ATH79_MACH_TL_WR941ND=y
> +CONFIG_ATH79_MACH_TL_WR941ND_V6=y
>  CONFIG_ATH79_MACH_TUBE2H=y
>  CONFIG_ATH79_MACH_UBNT=y
>  CONFIG_ATH79_MACH_UBNT_XM=y
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
> new file mode 100644
> index 0000000..c5fc9fc
> --- /dev/null
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
> @@ -0,0 +1,151 @@
> +/*
> + *  TP-LINK TL-WR941N/ND v6 board support
> + *
> + *  Copyright (C) 2015 Matthias Schiffer <mschiffer@universe-factory.net>
> + *
> + *  This program is free software; you can redistribute it and/or modify it
> + *  under the terms of the GNU General Public License version 2 as published
> + *  by the Free Software Foundation.
> + */
> +
> +#include <linux/gpio.h>
> +#include <linux/platform_device.h>
> +
> +#include <asm/mach-ath79/ath79.h>
> +#include <asm/mach-ath79/ar71xx_regs.h>
> +
> +#include "common.h"
> +#include "dev-eth.h"
> +#include "dev-gpio-buttons.h"
> +#include "dev-leds-gpio.h"
> +#include "dev-m25p80.h"
> +#include "dev-wmac.h"
> +#include "machtypes.h"
> +
> +
> +#define TL_WR941ND_V6_GPIO_LED_QSS		3
> +#define TL_WR941ND_V6_GPIO_LED_WAN		14
> +#define TL_WR941ND_V6_GPIO_LED_WAN_RED		15
> +#define TL_WR941ND_V6_GPIO_LED_LAN1		7
> +#define TL_WR941ND_V6_GPIO_LED_LAN2		6
> +#define TL_WR941ND_V6_GPIO_LED_LAN3		5
> +#define TL_WR941ND_V6_GPIO_LED_LAN4		4
> +#define TL_WR941ND_V6_GPIO_LED_WLAN		8
> +#define TL_WR941ND_V6_GPIO_LED_SYSTEM		18
> +
> +#define TL_WR941ND_V6_GPIO_BTN_RESET		1
> +#define TL_WR941ND_V6_GPIO_BTN_RFKILL		2
> +
> +#define TL_WR941ND_V6_KEYS_POLL_INTERVAL	20
> +#define TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL	(3 * TL_WR941ND_V6_KEYS_POLL_INTERVAL)
> +
> +
> +static struct gpio_led tl_wr941nd_v6_leds_gpio[] __initdata = {
> +	{
> +		.name		= "tp-link:blue:qss",
> +		.gpio		= TL_WR941ND_V6_GPIO_LED_QSS,
> +		.active_low	= 1,
> +	},
> +	{
> +		.name		= "tp-link:blue:wan",
> +		.gpio		= TL_WR941ND_V6_GPIO_LED_WAN,
> +		.active_low	= 1,
> +	},
> +	{
> +		.name		= "tp-link:red:wan",
> +		.gpio		= TL_WR941ND_V6_GPIO_LED_WAN_RED,
> +		.active_low	= 0,
> +	},
> +	{
> +		.name		= "tp-link:blue:lan1",
> +		.gpio		= TL_WR941ND_V6_GPIO_LED_LAN1,
> +		.active_low	= 1,
> +	},
> +	{
> +		.name		= "tp-link:blue:lan2",
> +		.gpio		= TL_WR941ND_V6_GPIO_LED_LAN2,
> +		.active_low	= 1,
> +	},
> +	{
> +		.name		= "tp-link:blue:lan3",
> +		.gpio		= TL_WR941ND_V6_GPIO_LED_LAN3,
> +		.active_low	= 1,
> +	},
> +	{
> +		.name		= "tp-link:blue:lan4",
> +		.gpio		= TL_WR941ND_V6_GPIO_LED_LAN4,
> +		.active_low	= 1,
> +	},
> +	{
> +		.name		= "tp-link:blue:wlan",
> +		.gpio		= TL_WR941ND_V6_GPIO_LED_WLAN,
> +		.active_low	= 1,
> +	},
> +	{
> +		.name		= "tp-link:blue:system",
> +		.gpio		= TL_WR941ND_V6_GPIO_LED_SYSTEM,
> +		.active_low	= 1,
> +	},
> +};
> +
> +static struct gpio_keys_button tl_wr941nd_v6_gpio_keys[] __initdata = {
> +	{
> +		.desc		= "Reset button",
> +		.type		= EV_KEY,
> +		.code		= KEY_RESTART,
> +		.debounce_interval = TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL,
> +		.gpio		= TL_WR941ND_V6_GPIO_BTN_RESET,
> +		.active_low	= 1,
> +	}, {
> +		.desc		= "RFKILL button",
> +		.type		= EV_KEY,
> +		.code		= KEY_RFKILL,
> +		.debounce_interval = TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL,
> +		.gpio		= TL_WR941ND_V6_GPIO_BTN_RFKILL,
> +		.active_low	= 1,
> +	}
> +};
> +
> +
> +static const char *tl_wr941n_v6_part_probes[] = {
> +	"tp-link",
> +	NULL,
> +};
> +
> +static struct flash_platform_data tl_wr941n_v6_flash_data = {
> +	.part_probes	= tl_wr941n_v6_part_probes,
> +};
> +
> +
> +static void __init tl_wr941nd_v6_setup(void)
> +{
> +	u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
> +	u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
> +
> +	ath79_register_m25p80(&tl_wr941n_v6_flash_data);
> +
> +	ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr941nd_v6_leds_gpio),
> +				 tl_wr941nd_v6_leds_gpio);
> +
> +	ath79_register_gpio_keys_polled(-1, TL_WR941ND_V6_KEYS_POLL_INTERVAL,
> +					ARRAY_SIZE(tl_wr941nd_v6_gpio_keys),
> +					tl_wr941nd_v6_gpio_keys);
> +
> +	ath79_register_mdio(0, 0x0);
> +
> +	ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
> +	ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
> +
> +	ath79_switch_data.phy4_mii_en = 1;
> +	ath79_switch_data.phy_poll_mask = BIT(0);
> +	ath79_eth0_data.phy_mask = BIT(0);
> +
> +	ath79_register_eth(0);
> +	ath79_register_eth(1);
> +
> +	ath79_register_wmac(ee, mac);
> +
> +}
> +
> +MIPS_MACHINE(ATH79_MACH_TL_WR941ND_V6, "TL-WR941ND-v6", "TP-LINK TL-WR941N/ND v6",
> +	     tl_wr941nd_v6_setup);
> diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
> index e894d78..f9e0087 100644
> --- a/target/linux/ar71xx/image/Makefile
> +++ b/target/linux/ar71xx/image/Makefile
> @@ -620,7 +620,7 @@ endef
>  
>  define Device/tl-wr941nd-v6
>      $(Device/tplink-4mlzma)
> -    BOARDNAME := TL-WDR3500
> +    BOARDNAME := TL-WR941ND-v6
>      DEVICE_PROFILE := TLWR941
>      TPLINK_HWID := 0x09410006
>  endef
> diff --git a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
> index 02ebd1b..558d43c 100644
> --- a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
> +++ b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
> @@ -1,6 +1,6 @@
>  --- a/arch/mips/ath79/machtypes.h
>  +++ b/arch/mips/ath79/machtypes.h
> -@@ -16,24 +16,207 @@
> +@@ -16,24 +16,208 @@
>   
>   enum ath79_mach_type {
>   	ATH79_MACH_GENERIC = 0,
> @@ -157,6 +157,7 @@
>  +	ATH79_MACH_TL_WR842N_V2,	/* TP-LINK TL-WR842N/ND v2 */
>  +	ATH79_MACH_TL_WR941ND,		/* TP-LINK TL-WR941ND */
>  +	ATH79_MACH_TL_WR941ND_V5,	/* TP-LINK TL-WR941ND v5 */
> ++	ATH79_MACH_TL_WR941ND_V6,	/* TP-LINK TL-WR941ND v6 */
>  +	ATH79_MACH_TUBE2H,		/* Alfa Network Tube2H */
>  +	ATH79_MACH_UBNT_AIRGW,		/* Ubiquiti AirGateway */
>   	ATH79_MACH_UBNT_AIRROUTER,	/* Ubiquiti AirRouter */
> @@ -301,7 +302,7 @@
>   config ATH79_MACH_AP121
>   	bool "Atheros AP121 reference board"
>   	select SOC_AR933X
> -@@ -11,62 +95,1107 @@ config ATH79_MACH_AP121
> +@@ -11,62 +95,1116 @@ config ATH79_MACH_AP121
>   	select ATH79_DEV_M25P80
>   	select ATH79_DEV_USB
>   	select ATH79_DEV_WMAC
> @@ -1342,6 +1343,15 @@
>  +	select ATH79_DEV_M25P80
>  +	select ATH79_DEV_WMAC
>  +
> ++config ATH79_MACH_TL_WR941ND_V6
> ++       bool "TP-LINK TL-WR941ND v6 support"
> ++       select SOC_QCA956X
> ++       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_WR1041N_V2
>  +	bool "TP-LINK TL-WR1041N v2 support"
>  +	select SOC_AR934X
> @@ -1437,7 +1447,7 @@
>   
>   config ATH79_MACH_UBNT_XM
>   	bool "Ubiquiti Networks XM/UniFi boards"
> -@@ -83,6 +1212,97 @@ config ATH79_MACH_UBNT_XM
> +@@ -83,6 +1221,97 @@ config ATH79_MACH_UBNT_XM
>   	  Say 'Y' here if you want your kernel to support the
>   	  Ubiquiti Networks XM (rev 1.0) board.
>   
> @@ -1535,7 +1545,7 @@
>   endmenu
>   
>   config SOC_AR71XX
> -@@ -134,7 +1354,10 @@ config ATH79_DEV_DSA
> +@@ -134,7 +1363,10 @@ config ATH79_DEV_DSA
>   config ATH79_DEV_ETH
>   	def_bool n
>   
> @@ -1547,7 +1557,7 @@
>   	def_bool n
>   
>   config ATH79_DEV_GPIO_BUTTONS
> -@@ -164,6 +1387,11 @@ config ATH79_PCI_ATH9K_FIXUP
> +@@ -164,6 +1396,11 @@ config ATH79_PCI_ATH9K_FIXUP
>   	def_bool n
>   
>   config ATH79_ROUTERBOOT
> @@ -1561,7 +1571,7 @@
>   endif
>  --- a/arch/mips/ath79/Makefile
>  +++ b/arch/mips/ath79/Makefile
> -@@ -38,9 +38,133 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)		+= route
> +@@ -38,9 +38,134 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)		+= route
>   #
>   # Machines
>   #
> @@ -1661,6 +1671,7 @@
>  +obj-$(CONFIG_ATH79_MACH_TL_WR841N_V8)	+= mach-tl-wr841n-v8.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR841N_V9)	+= mach-tl-wr841n-v9.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR941ND)	+= mach-tl-wr941nd.o
> ++obj-$(CONFIG_ATH79_MACH_TL_WR941ND_V6)	+= mach-tl-wr941nd-v6.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR1041N_V2)	+= mach-tl-wr1041n-v2.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR1043ND)	+= mach-tl-wr1043nd.o
>  +obj-$(CONFIG_ATH79_MACH_TL_WR1043ND_V2)	+= mach-tl-wr1043nd-v2.o
>
Matthias Schiffer Aug. 6, 2015, 7:21 p.m. UTC | #3
Hi,
as I've already written on the OpenWrt ML, I'm currently porting OpenWrt
to the TP-LINK TL-WR941ND v6, which uses a TP9343 SoC (which is
confusingly part of the QCA956x series). The WMAC identifies as QCA9561
(0x600 rev 0).

I'm unable to get the WLAN working at all. The TX seems to work fine (at
least I can see the beacons when I put the card into AP mode), but RX is
completely dead (iw scan is empty, etc...).

As I'm not familar with ath9k, I need some help debugging this. I'm
using the OpenWrt trunk, which contains a recent version of mac80211
based on wireless-testing, it already contains the patches "ath9k_hw:
fix device ID check for AR956x" and "ath9k: Fix register definitions for
QCA956x".

I've attached a dump of all debugfs information ath9k provides while the
WLAN is configured in IBSS mode in a cell that should be quite active.

Thanks in advance,
Matthias
diff mbox

Patch

diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
index 561c5da..46b83fc 100644
--- a/target/linux/ar71xx/base-files/etc/diag.sh
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
@@ -277,7 +277,8 @@  get_status_led() {
 	tl-wdr4300 | \
 	tl-wr703n | \
 	tl-wr710n | \
-	tl-wr720n-v3)
+	tl-wr720n-v3 | \
+	tl-wr941nd-v6)
 		status_led="tp-link:blue:system"
 		;;
 	tl-wr841n-v9)
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
index 2aced37..3344d97 100644
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
@@ -474,6 +474,15 @@  tl-wr941nd-v5)
 	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
 	;;
 
+tl-wr941nd-v6)
+	ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth0"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:blue:lan1" "switch0" "0x10"
+	ucidef_set_led_switch "lan2" "LAN2" "tp-link:blue:lan2" "switch0" "0x08"
+	ucidef_set_led_switch "lan3" "LAN3" "tp-link:blue:lan3" "switch0" "0x04"
+	ucidef_set_led_switch "lan4" "LAN4" "tp-link:blue:lan4" "switch0" "0x02"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt"
+	;;
+
 tl-wa830re-v2)
 	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
 	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
index 2893e62..a6507db 100755
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
@@ -227,6 +227,7 @@  tl-mr3420-v2 |\
 tl-wr841n-v8 |\
 tl-wr842n-v2 |\
 tl-wr941nd-v5 |\
+tl-wr941nd-v6 |\
 wnr2000-v3 |\
 wnr2000-v4 |\
 wnr2200 |\
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
index 256bd10..5d27538 100755
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -793,6 +793,9 @@  ar71xx_board_detect() {
 	*"TL-WR941N/ND v5")
 		name="tl-wr941nd-v5"
 		;;
+	*"TL-WR941N/ND v6")
+		name="tl-wr941nd-v6"
+		;;
 	*"TL-WR703N v1")
 		name="tl-wr703n"
 		;;
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
index 76d8c5b..55ff568 100755
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -353,6 +353,7 @@  platform_check_image() {
 	tl-wr842n-v2 | \
 	tl-wr941nd | \
 	tl-wr941nd-v5 | \
+	tl-wr941nd-v6 | \
 	tl-wr1041n-v2 | \
 	tl-wr1043nd | \
 	tl-wr1043nd-v2 | \
diff --git a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1
index 1e31a01..ecaf454 100644
--- a/target/linux/ar71xx/config-4.1
+++ b/target/linux/ar71xx/config-4.1
@@ -134,6 +134,7 @@  CONFIG_ATH79_MACH_TL_WR841N_V1=y
 CONFIG_ATH79_MACH_TL_WR841N_V8=y
 CONFIG_ATH79_MACH_TL_WR841N_V9=y
 CONFIG_ATH79_MACH_TL_WR941ND=y
+CONFIG_ATH79_MACH_TL_WR941ND_V6=y
 CONFIG_ATH79_MACH_TUBE2H=y
 CONFIG_ATH79_MACH_UBNT=y
 CONFIG_ATH79_MACH_UBNT_XM=y
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
new file mode 100644
index 0000000..c5fc9fc
--- /dev/null
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr941nd-v6.c
@@ -0,0 +1,151 @@ 
+/*
+ *  TP-LINK TL-WR941N/ND v6 board support
+ *
+ *  Copyright (C) 2015 Matthias Schiffer <mschiffer@universe-factory.net>
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ */
+
+#include <linux/gpio.h>
+#include <linux/platform_device.h>
+
+#include <asm/mach-ath79/ath79.h>
+#include <asm/mach-ath79/ar71xx_regs.h>
+
+#include "common.h"
+#include "dev-eth.h"
+#include "dev-gpio-buttons.h"
+#include "dev-leds-gpio.h"
+#include "dev-m25p80.h"
+#include "dev-wmac.h"
+#include "machtypes.h"
+
+
+#define TL_WR941ND_V6_GPIO_LED_QSS		3
+#define TL_WR941ND_V6_GPIO_LED_WAN		14
+#define TL_WR941ND_V6_GPIO_LED_WAN_RED		15
+#define TL_WR941ND_V6_GPIO_LED_LAN1		7
+#define TL_WR941ND_V6_GPIO_LED_LAN2		6
+#define TL_WR941ND_V6_GPIO_LED_LAN3		5
+#define TL_WR941ND_V6_GPIO_LED_LAN4		4
+#define TL_WR941ND_V6_GPIO_LED_WLAN		8
+#define TL_WR941ND_V6_GPIO_LED_SYSTEM		18
+
+#define TL_WR941ND_V6_GPIO_BTN_RESET		1
+#define TL_WR941ND_V6_GPIO_BTN_RFKILL		2
+
+#define TL_WR941ND_V6_KEYS_POLL_INTERVAL	20
+#define TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL	(3 * TL_WR941ND_V6_KEYS_POLL_INTERVAL)
+
+
+static struct gpio_led tl_wr941nd_v6_leds_gpio[] __initdata = {
+	{
+		.name		= "tp-link:blue:qss",
+		.gpio		= TL_WR941ND_V6_GPIO_LED_QSS,
+		.active_low	= 1,
+	},
+	{
+		.name		= "tp-link:blue:wan",
+		.gpio		= TL_WR941ND_V6_GPIO_LED_WAN,
+		.active_low	= 1,
+	},
+	{
+		.name		= "tp-link:red:wan",
+		.gpio		= TL_WR941ND_V6_GPIO_LED_WAN_RED,
+		.active_low	= 0,
+	},
+	{
+		.name		= "tp-link:blue:lan1",
+		.gpio		= TL_WR941ND_V6_GPIO_LED_LAN1,
+		.active_low	= 1,
+	},
+	{
+		.name		= "tp-link:blue:lan2",
+		.gpio		= TL_WR941ND_V6_GPIO_LED_LAN2,
+		.active_low	= 1,
+	},
+	{
+		.name		= "tp-link:blue:lan3",
+		.gpio		= TL_WR941ND_V6_GPIO_LED_LAN3,
+		.active_low	= 1,
+	},
+	{
+		.name		= "tp-link:blue:lan4",
+		.gpio		= TL_WR941ND_V6_GPIO_LED_LAN4,
+		.active_low	= 1,
+	},
+	{
+		.name		= "tp-link:blue:wlan",
+		.gpio		= TL_WR941ND_V6_GPIO_LED_WLAN,
+		.active_low	= 1,
+	},
+	{
+		.name		= "tp-link:blue:system",
+		.gpio		= TL_WR941ND_V6_GPIO_LED_SYSTEM,
+		.active_low	= 1,
+	},
+};
+
+static struct gpio_keys_button tl_wr941nd_v6_gpio_keys[] __initdata = {
+	{
+		.desc		= "Reset button",
+		.type		= EV_KEY,
+		.code		= KEY_RESTART,
+		.debounce_interval = TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL,
+		.gpio		= TL_WR941ND_V6_GPIO_BTN_RESET,
+		.active_low	= 1,
+	}, {
+		.desc		= "RFKILL button",
+		.type		= EV_KEY,
+		.code		= KEY_RFKILL,
+		.debounce_interval = TL_WR941ND_V6_KEYS_DEBOUNCE_INTERVAL,
+		.gpio		= TL_WR941ND_V6_GPIO_BTN_RFKILL,
+		.active_low	= 1,
+	}
+};
+
+
+static const char *tl_wr941n_v6_part_probes[] = {
+	"tp-link",
+	NULL,
+};
+
+static struct flash_platform_data tl_wr941n_v6_flash_data = {
+	.part_probes	= tl_wr941n_v6_part_probes,
+};
+
+
+static void __init tl_wr941nd_v6_setup(void)
+{
+	u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
+	u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+
+	ath79_register_m25p80(&tl_wr941n_v6_flash_data);
+
+	ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr941nd_v6_leds_gpio),
+				 tl_wr941nd_v6_leds_gpio);
+
+	ath79_register_gpio_keys_polled(-1, TL_WR941ND_V6_KEYS_POLL_INTERVAL,
+					ARRAY_SIZE(tl_wr941nd_v6_gpio_keys),
+					tl_wr941nd_v6_gpio_keys);
+
+	ath79_register_mdio(0, 0x0);
+
+	ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
+	ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
+
+	ath79_switch_data.phy4_mii_en = 1;
+	ath79_switch_data.phy_poll_mask = BIT(0);
+	ath79_eth0_data.phy_mask = BIT(0);
+
+	ath79_register_eth(0);
+	ath79_register_eth(1);
+
+	ath79_register_wmac(ee, mac);
+
+}
+
+MIPS_MACHINE(ATH79_MACH_TL_WR941ND_V6, "TL-WR941ND-v6", "TP-LINK TL-WR941N/ND v6",
+	     tl_wr941nd_v6_setup);
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
index e894d78..f9e0087 100644
--- a/target/linux/ar71xx/image/Makefile
+++ b/target/linux/ar71xx/image/Makefile
@@ -620,7 +620,7 @@  endef
 
 define Device/tl-wr941nd-v6
     $(Device/tplink-4mlzma)
-    BOARDNAME := TL-WDR3500
+    BOARDNAME := TL-WR941ND-v6
     DEVICE_PROFILE := TLWR941
     TPLINK_HWID := 0x09410006
 endef
diff --git a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
index 02ebd1b..558d43c 100644
--- a/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
+++ b/target/linux/ar71xx/patches-4.1/700-MIPS-ath79-openwrt-machines.patch
@@ -1,6 +1,6 @@ 
 --- a/arch/mips/ath79/machtypes.h
 +++ b/arch/mips/ath79/machtypes.h
-@@ -16,24 +16,207 @@
+@@ -16,24 +16,208 @@
  
  enum ath79_mach_type {
  	ATH79_MACH_GENERIC = 0,
@@ -157,6 +157,7 @@ 
 +	ATH79_MACH_TL_WR842N_V2,	/* TP-LINK TL-WR842N/ND v2 */
 +	ATH79_MACH_TL_WR941ND,		/* TP-LINK TL-WR941ND */
 +	ATH79_MACH_TL_WR941ND_V5,	/* TP-LINK TL-WR941ND v5 */
++	ATH79_MACH_TL_WR941ND_V6,	/* TP-LINK TL-WR941ND v6 */
 +	ATH79_MACH_TUBE2H,		/* Alfa Network Tube2H */
 +	ATH79_MACH_UBNT_AIRGW,		/* Ubiquiti AirGateway */
  	ATH79_MACH_UBNT_AIRROUTER,	/* Ubiquiti AirRouter */
@@ -301,7 +302,7 @@ 
  config ATH79_MACH_AP121
  	bool "Atheros AP121 reference board"
  	select SOC_AR933X
-@@ -11,62 +95,1107 @@ config ATH79_MACH_AP121
+@@ -11,62 +95,1116 @@ config ATH79_MACH_AP121
  	select ATH79_DEV_M25P80
  	select ATH79_DEV_USB
  	select ATH79_DEV_WMAC
@@ -1342,6 +1343,15 @@ 
 +	select ATH79_DEV_M25P80
 +	select ATH79_DEV_WMAC
 +
++config ATH79_MACH_TL_WR941ND_V6
++       bool "TP-LINK TL-WR941ND v6 support"
++       select SOC_QCA956X
++       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_WR1041N_V2
 +	bool "TP-LINK TL-WR1041N v2 support"
 +	select SOC_AR934X
@@ -1437,7 +1447,7 @@ 
  
  config ATH79_MACH_UBNT_XM
  	bool "Ubiquiti Networks XM/UniFi boards"
-@@ -83,6 +1212,97 @@ config ATH79_MACH_UBNT_XM
+@@ -83,6 +1221,97 @@ config ATH79_MACH_UBNT_XM
  	  Say 'Y' here if you want your kernel to support the
  	  Ubiquiti Networks XM (rev 1.0) board.
  
@@ -1535,7 +1545,7 @@ 
  endmenu
  
  config SOC_AR71XX
-@@ -134,7 +1354,10 @@ config ATH79_DEV_DSA
+@@ -134,7 +1363,10 @@ config ATH79_DEV_DSA
  config ATH79_DEV_ETH
  	def_bool n
  
@@ -1547,7 +1557,7 @@ 
  	def_bool n
  
  config ATH79_DEV_GPIO_BUTTONS
-@@ -164,6 +1387,11 @@ config ATH79_PCI_ATH9K_FIXUP
+@@ -164,6 +1396,11 @@ config ATH79_PCI_ATH9K_FIXUP
  	def_bool n
  
  config ATH79_ROUTERBOOT
@@ -1561,7 +1571,7 @@ 
  endif
 --- a/arch/mips/ath79/Makefile
 +++ b/arch/mips/ath79/Makefile
-@@ -38,9 +38,133 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)		+= route
+@@ -38,9 +38,134 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)		+= route
  #
  # Machines
  #
@@ -1661,6 +1671,7 @@ 
 +obj-$(CONFIG_ATH79_MACH_TL_WR841N_V8)	+= mach-tl-wr841n-v8.o
 +obj-$(CONFIG_ATH79_MACH_TL_WR841N_V9)	+= mach-tl-wr841n-v9.o
 +obj-$(CONFIG_ATH79_MACH_TL_WR941ND)	+= mach-tl-wr941nd.o
++obj-$(CONFIG_ATH79_MACH_TL_WR941ND_V6)	+= mach-tl-wr941nd-v6.o
 +obj-$(CONFIG_ATH79_MACH_TL_WR1041N_V2)	+= mach-tl-wr1041n-v2.o
 +obj-$(CONFIG_ATH79_MACH_TL_WR1043ND)	+= mach-tl-wr1043nd.o
 +obj-$(CONFIG_ATH79_MACH_TL_WR1043ND_V2)	+= mach-tl-wr1043nd-v2.o