[OpenWrt-Devel] [RFC] ar71xx: add TP-Link TL-WR810N support

John Crispin john at phrozen.org
Mon Apr 25 16:02:24 EDT 2016


Hi

On 10/04/2016 14:00, Jens Steinhauser wrote:
> This patch adds support for the TP-Link TL-WR810N.
> https://wiki.openwrt.org/toh/tp-link/tl-wr810n
> 
> The device has a slide switch to select its mode of operation when using
> the stock firmware. After looking at how it's implemented for similar
> devices, I also used 'struct gpio_keys_button { .type = EV_SW, .code = BTN_... }'
> to support the switch, but both 'switch_b0' and 'switch_b1' are missing
> when using 'evtest' and 'thd', only the 'reset' button shows up in the
> output of the programs.
> 
> Changing '.code' to some SW_ value, for example SW_LID and SW_TABLET_MODE,
> makes them usable with both 'evtest' and 'thd'. Am I missing something,
> or is EV_SW + BTN_... an invalid combination?

i use EV_SW and KEY_RFKILL on various boards and it works well. look at
package/base-files/files/etc/rc.button/rfkill to see how to handle the
events in userland

	John

> 
> Apart from this, OpenWrt is running fine on the device.
> 
> Signed-off-by: Jens Steinhauser <jens.steinhauser at gmail.com>
> ---
>  .../linux/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.1                     |   1 +
>  target/linux/ar71xx/config-4.4                     |   1 +
>  .../ar71xx/files/arch/mips/ath79/Kconfig.openwrt   |  10 ++
>  target/linux/ar71xx/files/arch/mips/ath79/Makefile |   1 +
>  .../ar71xx/files/arch/mips/ath79/mach-tl-wr810n.c  | 135 +++++++++++++++++++++
>  .../linux/ar71xx/files/arch/mips/ath79/machtypes.h |   1 +
>  target/linux/ar71xx/generic/profiles/tp-link.mk    |  11 ++
>  target/linux/ar71xx/image/Makefile                 |   8 ++
>  12 files changed, 174 insertions(+)
>  create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr810n.c
> 
> 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 8fdfa07..8754e62 100755
> --- a/target/linux/ar71xx/base-files/etc/board.d/02_network
> +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
> @@ -396,6 +396,7 @@ pb44 |\
>  routerstation|\
>  tl-wr710n |\
>  tl-wr720n-v3|\
> +tl-wr810n |\
>  wpe72)
>  	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 1f9bd3f..bd6f3f8 100644
> --- a/target/linux/ar71xx/base-files/etc/diag.sh
> +++ b/target/linux/ar71xx/base-files/etc/diag.sh
> @@ -332,6 +332,7 @@ get_status_led() {
>  	tl-wr703n | \
>  	tl-wr710n | \
>  	tl-wr720n-v3 | \
> +	tl-wr810n | \
>  	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 3d4541e..522f541 100755
> --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
> +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> @@ -922,6 +922,9 @@ ar71xx_board_detect() {
>  	*"TL-WR720N"*)
>  		name="tl-wr720n-v3"
>  		;;
> +	*"TL-WR810N")
> +		name="tl-wr810n"
> +		;;
>  	*"TL-MR10U")
>  		name="tl-mr10u"
>  		;;
> diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> index d44ece5..e4fb8b8 100755
> --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> @@ -377,6 +377,7 @@ platform_check_image() {
>  	tl-wr720n-v3 | \
>  	tl-wr741nd | \
>  	tl-wr741nd-v4 | \
> +	tl-wr810n | \
>  	tl-wr841n-v1 | \
>  	tl-wa830re-v2 | \
>  	tl-wr841n-v7 | \
> diff --git a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1
> index fa98643..1baee7e 100644
> --- a/target/linux/ar71xx/config-4.1
> +++ b/target/linux/ar71xx/config-4.1
> @@ -157,6 +157,7 @@ CONFIG_ATH79_MACH_TL_WR703N=y
>  CONFIG_ATH79_MACH_TL_WR720N_V3=y
>  CONFIG_ATH79_MACH_TL_WR741ND=y
>  CONFIG_ATH79_MACH_TL_WR741ND_V4=y
> +CONFIG_ATH79_MACH_TL_WR810N=y
>  CONFIG_ATH79_MACH_TL_WR841N_V1=y
>  CONFIG_ATH79_MACH_TL_WR841N_V8=y
>  CONFIG_ATH79_MACH_TL_WR841N_V9=y
> diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4
> index ec04c28..9c0db09 100644
> --- a/target/linux/ar71xx/config-4.4
> +++ b/target/linux/ar71xx/config-4.4
> @@ -159,6 +159,7 @@ CONFIG_ATH79_MACH_TL_WR703N=y
>  CONFIG_ATH79_MACH_TL_WR720N_V3=y
>  CONFIG_ATH79_MACH_TL_WR741ND=y
>  CONFIG_ATH79_MACH_TL_WR741ND_V4=y
> +CONFIG_ATH79_MACH_TL_WR810N=y
>  CONFIG_ATH79_MACH_TL_WR841N_V1=y
>  CONFIG_ATH79_MACH_TL_WR841N_V8=y
>  CONFIG_ATH79_MACH_TL_WR841N_V9=y
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
> index 8c77645..8ce6620 100644
> --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
> @@ -1274,6 +1274,16 @@ config ATH79_MACH_TL_WR741ND_V4
>  	select ATH79_DEV_USB
>  	select ATH79_DEV_WMAC
>  
> +config ATH79_MACH_TL_WR810N
> +	bool "TP-LINK TL-WR810N 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_USB
> +	select ATH79_DEV_WMAC
> +
>  config ATH79_MACH_TL_WR841N_V1
>  	bool "TP-LINK TL-WR841N v1 support"
>  	select SOC_AR71XX
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
> index 862a2e3..9af7e50 100644
> --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
> @@ -158,6 +158,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WDR4300)     += mach-tl-wdr4300.o
>  obj-$(CONFIG_ATH79_MACH_TL_WDR6500_V2)  += mach-tl-wdr6500-v2.o
>  obj-$(CONFIG_ATH79_MACH_TL_WR741ND)	+= mach-tl-wr741nd.o
>  obj-$(CONFIG_ATH79_MACH_TL_WR741ND_V4)	+= mach-tl-wr741nd-v4.o
> +obj-$(CONFIG_ATH79_MACH_TL_WR810N)	+= mach-tl-wr810n.o
>  obj-$(CONFIG_ATH79_MACH_TL_WR841N_V1)	+= mach-tl-wr841n.o
>  obj-$(CONFIG_ATH79_MACH_TL_WR841N_V8)	+= mach-tl-wr841n-v8.o
>  obj-$(CONFIG_ATH79_MACH_TL_WR841N_V9)	+= mach-tl-wr841n-v9.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
> new file mode 100644
> index 0000000..906c5f8
> --- /dev/null
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr810n.c
> @@ -0,0 +1,135 @@
> +/*
> + * TP-LINK TL-WR810N board support
> + *
> + * Copyright (c) 2012 Qualcomm Atheros
> + * Copyright (c) 2012 Gabor Juhos <juhosg at openwrt.org>
> + * Copyright (c) 2016 Jens Steinhauser <jens.steinhauser at gmail.com>
> + *
> + * Permission to use, copy, modify, and/or distribute this software for any
> + * purpose with or without fee is hereby granted, provided that the above
> + * copyright notice and this permission notice appear in all copies.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> + */
> +
> +#include <linux/gpio.h>
> +#include <linux/platform_device.h>
> +#include <linux/ar8216_platform.h>
> +
> +#include <asm/mach-ath79/ar71xx_regs.h>
> +
> +#include "common.h"
> +#include "dev-gpio-buttons.h"
> +#include "dev-eth.h"
> +#include "dev-leds-gpio.h"
> +#include "dev-m25p80.h"
> +#include "dev-usb.h"
> +#include "dev-wmac.h"
> +#include "machtypes.h"
> +
> +#define TL_WR810N_GPIO_SWITCH_B1	0
> +#define TL_WR810N_GPIO_SWITCH_B0	1
> +#define TL_WR810N_GPIO_USB_POWER	11
> +#define TL_WR810N_GPIO_BTN_RESET	12
> +#define TL_WR810N_GPIO_LED_SYSTEM	13
> +
> +#define TL_WR810N_KEYS_POLL_INTERVAL	20 /* msecs */
> +#define TL_WR810N_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR810N_KEYS_POLL_INTERVAL)
> +
> +#define TL_WR810N_WMAC_CALDATA_OFFSET	0x1000
> +
> +static const char *tl_wr810n_part_probes[] = {
> +	"tp-link",
> +	NULL,
> +};
> +
> +static struct flash_platform_data tl_wr810n_flash_data = {
> +	.part_probes = tl_wr810n_part_probes,
> +};
> +
> +static struct gpio_led tl_wr810n_leds_gpio[] __initdata = {
> +	{
> +		.name		= "tp-link:blue:system",
> +		.gpio		= TL_WR810N_GPIO_LED_SYSTEM,
> +		.active_low	= 1,
> +	},
> +};
> +
> +static struct gpio_keys_button tl_wr810n_gpio_keys[] __initdata = {
> +	{
> +		.desc		= "reset",
> +		.type		= EV_KEY,
> +		.code		= KEY_RESTART,
> +		.debounce_interval = TL_WR810N_KEYS_DEBOUNCE_INTERVAL,
> +		.gpio		= TL_WR810N_GPIO_BTN_RESET,
> +		.active_low	= 1,
> +	},
> +	{
> +		.desc		= "switch_b0",
> +		.type		= EV_SW,
> +		.code		= BTN_0,
> +		.debounce_interval = TL_WR810N_KEYS_DEBOUNCE_INTERVAL,
> +		.gpio		= TL_WR810N_GPIO_SWITCH_B0,
> +		.active_low	= 0,
> +	},
> +	{
> +		.desc		= "switch_b1",
> +		.type		= EV_SW,
> +		.code		= BTN_1,
> +		.debounce_interval = TL_WR810N_KEYS_DEBOUNCE_INTERVAL,
> +		.gpio		= TL_WR810N_GPIO_SWITCH_B1,
> +		.active_low	= 0,
> +	},
> +};
> +
> +static void __init tl_wr810n_setup(void)
> +{
> +	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_register_mdio(0, 0x0);
> +
> +	/* WAN */
> +	ath79_eth0_data.duplex = DUPLEX_FULL;
> +	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
> +	ath79_eth0_data.speed = SPEED_100;
> +	ath79_eth0_data.phy_mask = BIT(4);
> +	ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
> +	ath79_register_eth(0);
> +
> +	/* 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.speed = SPEED_1000;
> +	ath79_switch_data.phy_poll_mask |= BIT(4);
> +	ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1);
> +	ath79_register_eth(1);
> +
> +	ath79_register_wmac(art + TL_WR810N_WMAC_CALDATA_OFFSET, mac);
> +
> +	gpio_request_one(TL_WR810N_GPIO_USB_POWER,
> +			 GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
> +			 "USB power");
> +	ath79_register_usb();
> +}
> +
> +MIPS_MACHINE(ATH79_MACH_TL_WR810N, "TL-WR810N", "TP-LINK TL-WR810N",
> +	     tl_wr810n_setup);
> diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
> index 0363c88..a4a8252 100644
> --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
> @@ -192,6 +192,7 @@ enum ath79_mach_type {
>  	ATH79_MACH_TL_WR720N_V3,	/* TP-LINK TL-WR720N v3/v4 */
>  	ATH79_MACH_TL_WR741ND,		/* TP-LINK TL-WR741ND */
>  	ATH79_MACH_TL_WR741ND_V4,	/* TP-LINK TL-WR741ND v4 */
> +	ATH79_MACH_TL_WR810N,		/* TP-LINK TL-WR810N */
>  	ATH79_MACH_TL_WR841N_V1,	/* TP-LINK TL-WR841N v1 */
>  	ATH79_MACH_TL_WR841N_V7,	/* TP-LINK TL-WR841N/ND v7 */
>  	ATH79_MACH_TL_WR841N_V8,	/* TP-LINK TL-WR841N/ND v8 */
> diff --git a/target/linux/ar71xx/generic/profiles/tp-link.mk b/target/linux/ar71xx/generic/profiles/tp-link.mk
> index 2875290..c44b22c 100644
> --- a/target/linux/ar71xx/generic/profiles/tp-link.mk
> +++ b/target/linux/ar71xx/generic/profiles/tp-link.mk
> @@ -332,6 +332,17 @@ endef
>  $(eval $(call Profile,TLWR743))
>  
>  
> +define Profile/TLWR810
> +	NAME:=TP-Link TL-WR810N
> +	PACKAGES:=kmod-usb-core kmod-usb2
> +endef
> +
> +define Profile/TLWR810/Description
> +	Package set optimized for the TP-LINK TL-WR810N.
> +endef
> +$(eval $(call Profile,TLWR810))
> +
> +
>  define Profile/TLWR841
>  	NAME:=TP-LINK TL-WR841N/ND
>  	PACKAGES:=
> diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
> index e4e2fcf..1f0cfcd 100644
> --- a/target/linux/ar71xx/image/Makefile
> +++ b/target/linux/ar71xx/image/Makefile
> @@ -783,6 +783,14 @@ define Device/tl-wr741nd-v5
>      CONSOLE := ttyATH0,115200
>  endef
>  
> +define Device/tl-wr810n
> +    $(Device/tplink-8mlzma)
> +    BOARDNAME := TL-WR810N
> +    DEVICE_PROFILE := TLWR810
> +    TPLINK_HWID := 0x08100001
> +endef
> +TARGET_DEVICES += tl-wr810n
> +
>  define Device/tl-wr743nd-v1
>      $(Device/tplink-4m)
>      BOARDNAME := TL-WR741ND
> 
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list