From f8aef84e49237ebc848c4b861628911d72f703f7 Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Wed, 25 Sep 2013 18:42:10 +0000 Subject: [PATCH] ar71xx: improve kernel support for the TL-MR3040 v2 This patch adds support for the hardware slide switch on the TL-MR3040 v2. Signed-off-by: Mads Hansen [juhosg: use EV_SW instead of EV_KEY] Signed-off-by: Gabor Juhos SVN-Revision: 38190 --- .../files/arch/mips/ath79/mach-tl-mr11u.c | 45 +++++++++++++++++++ ...-MIPS-ath79-add-TL-MR3040-v2-support.patch | 10 +++++ 2 files changed, 55 insertions(+) create mode 100644 target/linux/ar71xx/patches-3.10/628-MIPS-ath79-add-TL-MR3040-v2-support.patch diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-mr11u.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-mr11u.c index 818ed97678..74ccf639e0 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-mr11u.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-mr11u.c @@ -33,6 +33,9 @@ #define TL_MR11U_GPIO_USB_POWER 8 #define TL_MR3040_GPIO_USB_POWER 18 +#define TL_MR3040_V2_GPIO_BTN_SW1 19 +#define TL_MR3040_V2_GPIO_BTN_SW2 20 + #define TL_MR11U_KEYS_POLL_INTERVAL 20 /* msecs */ #define TL_MR11U_KEYS_DEBOUNCE_INTERVAL (3 * TL_MR11U_KEYS_POLL_INTERVAL) @@ -82,6 +85,33 @@ static struct gpio_keys_button tl_mr11u_gpio_keys[] __initdata = { }, }; +static struct gpio_keys_button tl_mr3040_v2_gpio_keys[] __initdata = { + { + .desc = "reset", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = TL_MR11U_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR11U_GPIO_BTN_RESET, + .active_low = 0, + }, + { + .desc = "sw1", + .type = EV_SW, + .code = BTN_0, + .debounce_interval = TL_MR11U_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR3040_V2_GPIO_BTN_SW1, + .active_low = 0, + }, + { + .desc = "sw2", + .type = EV_SW, + .code = BTN_1, + .debounce_interval = TL_MR11U_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR3040_V2_GPIO_BTN_SW2, + .active_low = 0, + } +}; + static void __init common_setup(void) { u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); @@ -136,3 +166,18 @@ static void __init tl_mr3040_setup(void) MIPS_MACHINE(ATH79_MACH_TL_MR3040, "TL-MR3040", "TP-LINK TL-MR3040", tl_mr3040_setup); + +static void __init tl_mr3040_v2_setup(void) +{ + common_setup(); + + ath79_register_gpio_keys_polled(-1, TL_MR11U_KEYS_POLL_INTERVAL, + ARRAY_SIZE(tl_mr3040_v2_gpio_keys), + tl_mr3040_v2_gpio_keys); + gpio_request_one(TL_MR3040_GPIO_USB_POWER, + GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, + "USB power"); +} + +MIPS_MACHINE(ATH79_MACH_TL_MR3040_V2, "TL-MR3040-v2", "TP-LINK TL-MR3040 v2", + tl_mr3040_v2_setup); diff --git a/target/linux/ar71xx/patches-3.10/628-MIPS-ath79-add-TL-MR3040-v2-support.patch b/target/linux/ar71xx/patches-3.10/628-MIPS-ath79-add-TL-MR3040-v2-support.patch new file mode 100644 index 0000000000..bb6d8b437a --- /dev/null +++ b/target/linux/ar71xx/patches-3.10/628-MIPS-ath79-add-TL-MR3040-v2-support.patch @@ -0,0 +1,10 @@ +--- a/arch/mips/ath79/machtypes.h ++++ b/arch/mips/ath79/machtypes.h +@@ -89,6 +89,7 @@ enum ath79_mach_type { + ATH79_MACH_TL_MR13U, /* TP-LINK TL-MR13U */ + ATH79_MACH_TL_MR3020, /* TP-LINK TL-MR3020 */ + ATH79_MACH_TL_MR3040, /* TP-LINK TL-MR3040 */ ++ ATH79_MACH_TL_MR3040_V2, /* TP-LINK TL-MR3040 v2 */ + ATH79_MACH_TL_MR3220, /* TP-LINK TL-MR3220 */ + ATH79_MACH_TL_MR3220_V2, /* TP-LINK TL-MR3220 v2 */ + ATH79_MACH_TL_MR3420, /* TP-LINK TL-MR3420 */