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