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.steinhau...@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 <juh...@openwrt.org>
> + * Copyright (c) 2016 Jens Steinhauser <jens.steinhau...@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@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to