diff options
Diffstat (limited to 'target/linux/brcm47xx/patches-3.10/121-MIPS-BCM47XX-Prepare-support-for-GPIO-buttons.patch')
-rw-r--r-- | target/linux/brcm47xx/patches-3.10/121-MIPS-BCM47XX-Prepare-support-for-GPIO-buttons.patch | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/target/linux/brcm47xx/patches-3.10/121-MIPS-BCM47XX-Prepare-support-for-GPIO-buttons.patch b/target/linux/brcm47xx/patches-3.10/121-MIPS-BCM47XX-Prepare-support-for-GPIO-buttons.patch deleted file mode 100644 index 627ea70..0000000 --- a/target/linux/brcm47xx/patches-3.10/121-MIPS-BCM47XX-Prepare-support-for-GPIO-buttons.patch +++ /dev/null @@ -1,152 +0,0 @@ -From e352ec3c581df40f159771b30c262c2bc7fb802e Mon Sep 17 00:00:00 2001 -From: Rafa? Mi?ecki <zajec5@gmail.com> -Date: Thu, 2 Jan 2014 13:31:32 +0100 -Subject: [PATCH 030/110] MIPS: BCM47XX: Prepare support for GPIO buttons - -So far this adds support for one Netgear model only, but it's designed -and ready to add many more device. We could hopefully import database -from OpenWrt. -Support for SSB is currently disabled, because SSB doesn't implement IRQ -domain yet. - -Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> -Acked-by: Hauke Mehrtens <hauke@hauke-m.de> -Acked-by: John Crispin <blogic@openwrt.org> -Patchwork: http://patchwork.linux-mips.org/patch/6300/ ---- - arch/mips/bcm47xx/Makefile | 2 +- - arch/mips/bcm47xx/bcm47xx_private.h | 3 ++ - arch/mips/bcm47xx/buttons.c | 95 +++++++++++++++++++++++++++++++++++ - arch/mips/bcm47xx/setup.c | 1 + - 4 files changed, 100 insertions(+), 1 deletion(-) - create mode 100644 arch/mips/bcm47xx/buttons.c - ---- a/arch/mips/bcm47xx/Makefile -+++ b/arch/mips/bcm47xx/Makefile -@@ -4,5 +4,5 @@ - # - - obj-y += irq.o nvram.o prom.o serial.o setup.o time.o sprom.o --obj-y += board.o leds.o -+obj-y += board.o buttons.o leds.o - obj-$(CONFIG_BCM47XX_SSB) += wgt634u.o ---- a/arch/mips/bcm47xx/bcm47xx_private.h -+++ b/arch/mips/bcm47xx/bcm47xx_private.h -@@ -3,6 +3,9 @@ - - #include <linux/kernel.h> - -+/* buttons.c */ -+int __init bcm47xx_buttons_register(void); -+ - /* leds.c */ - void __init bcm47xx_leds_register(void); - ---- /dev/null -+++ b/arch/mips/bcm47xx/buttons.c -@@ -0,0 +1,95 @@ -+#include "bcm47xx_private.h" -+ -+#include <linux/input.h> -+#include <linux/gpio_keys.h> -+#include <linux/interrupt.h> -+#include <linux/ssb/ssb_embedded.h> -+#include <bcm47xx_board.h> -+#include <bcm47xx.h> -+ -+/************************************************** -+ * Database -+ **************************************************/ -+ -+static const struct gpio_keys_button -+bcm47xx_buttons_netgear_wndr4500_v1[] __initconst = { -+ { -+ .code = KEY_WPS_BUTTON, -+ .gpio = 4, -+ .active_low = 1, -+ }, -+ { -+ .code = KEY_RFKILL, -+ .gpio = 5, -+ .active_low = 1, -+ }, -+ { -+ .code = KEY_RESTART, -+ .gpio = 6, -+ .active_low = 1, -+ }, -+}; -+ -+/************************************************** -+ * Init -+ **************************************************/ -+ -+static struct gpio_keys_platform_data bcm47xx_button_pdata; -+ -+static struct platform_device bcm47xx_buttons_gpio_keys = { -+ .name = "gpio-keys", -+ .dev = { -+ .platform_data = &bcm47xx_button_pdata, -+ } -+}; -+ -+/* Copy data from __initconst */ -+static int __init bcm47xx_buttons_copy(const struct gpio_keys_button *buttons, -+ size_t nbuttons) -+{ -+ size_t size = nbuttons * sizeof(*buttons); -+ -+ bcm47xx_button_pdata.buttons = kmalloc(size, GFP_KERNEL); -+ if (!bcm47xx_button_pdata.buttons) -+ return -ENOMEM; -+ memcpy(bcm47xx_button_pdata.buttons, buttons, size); -+ bcm47xx_button_pdata.nbuttons = nbuttons; -+ -+ return 0; -+} -+ -+#define bcm47xx_copy_bdata(dev_buttons) \ -+ bcm47xx_buttons_copy(dev_buttons, ARRAY_SIZE(dev_buttons)); -+ -+int __init bcm47xx_buttons_register(void) -+{ -+ enum bcm47xx_board board = bcm47xx_board_get(); -+ int err; -+ -+#ifdef CONFIG_BCM47XX_SSB -+ if (bcm47xx_bus_type == BCM47XX_BUS_TYPE_SSB) { -+ pr_debug("Buttons on SSB are not supported yet.\n"); -+ return -ENOTSUPP; -+ } -+#endif -+ -+ switch (board) { -+ case BCM47XX_BOARD_NETGEAR_WNDR4500V1: -+ err = bcm47xx_copy_bdata(bcm47xx_buttons_netgear_wndr4500_v1); -+ break; -+ default: -+ pr_debug("No buttons configuration found for this device\n"); -+ return -ENOTSUPP; -+ } -+ -+ if (err) -+ return -ENOMEM; -+ -+ err = platform_device_register(&bcm47xx_buttons_gpio_keys); -+ if (err) { -+ pr_err("Failed to register platform device: %d\n", err); -+ return err; -+ } -+ -+ return 0; -+} ---- a/arch/mips/bcm47xx/setup.c -+++ b/arch/mips/bcm47xx/setup.c -@@ -246,6 +246,7 @@ static int __init bcm47xx_register_bus_c - #endif - } - -+ bcm47xx_buttons_register(); - bcm47xx_leds_register(); - - return 0; |