[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