[backfire] target: standardize config file & patches dir names (2.6)
[openwrt-10.03/.git] / target / linux / orion / patches-2.6.32 / 090-wrt350nv2_gpio_leds_buttons.patch
diff --git a/target/linux/orion/patches-2.6.32/090-wrt350nv2_gpio_leds_buttons.patch b/target/linux/orion/patches-2.6.32/090-wrt350nv2_gpio_leds_buttons.patch
new file mode 100644 (file)
index 0000000..30f75fc
--- /dev/null
@@ -0,0 +1,102 @@
+--- a/arch/arm/mach-orion5x/wrt350n-v2-setup.c
++++ b/arch/arm/mach-orion5x/wrt350n-v2-setup.c
+@@ -15,6 +15,9 @@
+ #include <linux/mtd/physmap.h>
+ #include <linux/mv643xx_eth.h>
+ #include <linux/ethtool.h>
++#include <linux/leds.h>
++#include <linux/gpio_keys.h>
++#include <linux/input.h>
+ #include <net/dsa.h>
+ #include <asm/mach-types.h>
+ #include <asm/gpio.h>
+@@ -24,6 +27,80 @@
+ #include "common.h"
+ #include "mpp.h"
++/*
++ * LEDs attached to GPIO
++ */
++static struct gpio_led wrt350n_v2_led_pins[] = {
++      {
++              .name           = "wrt350nv2:green:power",
++              .gpio           = 0,
++              .active_low     = 1,
++      }, {
++              .name           = "wrt350nv2:green:security",
++              .gpio           = 1,
++              .active_low     = 1,
++      }, {
++              .name           = "wrt350nv2:orange:power",
++              .gpio           = 5,
++              .active_low     = 1,
++      }, {
++              .name           = "wrt350nv2:green:usb",
++              .gpio           = 6,
++              .active_low     = 1,
++      }, {
++              .name           = "wrt350nv2:green:wireless",
++              .gpio           = 7,
++              .active_low     = 1,
++      },
++};
++
++static struct gpio_led_platform_data wrt350n_v2_led_data = {
++      .leds           = wrt350n_v2_led_pins,
++      .num_leds       = ARRAY_SIZE(wrt350n_v2_led_pins),
++};
++
++static struct platform_device wrt350n_v2_leds = {
++      .name   = "leds-gpio",
++      .id     = -1,
++      .dev    = {
++              .platform_data  = &wrt350n_v2_led_data,
++      },
++};
++
++/*
++ * Buttons attached to GPIO
++ */
++static struct gpio_keys_button wrt350n_v2_buttons[] = {
++        {
++                .code           = KEY_RESTART,
++                .gpio           = 3,
++                .desc           = "Reset Button",
++                .active_low     = 1,
++        }, {
++                .code           = KEY_WLAN,
++                .gpio           = 2,
++                .desc           = "WPS Button",
++                .active_low     = 1,
++        },
++};
++
++static struct gpio_keys_platform_data wrt350n_v2_button_data = {
++        .buttons        = wrt350n_v2_buttons,
++        .nbuttons       = ARRAY_SIZE(wrt350n_v2_buttons),
++};
++
++static struct platform_device wrt350n_v2_button_device = {
++        .name           = "gpio-keys",
++        .id             = -1,
++        .num_resources  = 0,
++        .dev            = {
++                .platform_data  = &wrt350n_v2_button_data,
++        },
++};
++
++/*
++ * General setup
++ */
+ static struct orion5x_mpp_mode wrt350n_v2_mpp_modes[] __initdata = {
+       {  0, MPP_GPIO },               /* Power LED green (0=on) */
+       {  1, MPP_GPIO },               /* Security LED (0=on) */
+@@ -140,6 +217,8 @@ static void __init wrt350n_v2_init(void)
+       orion5x_setup_dev_boot_win(WRT350N_V2_NOR_BOOT_BASE,
+                                  WRT350N_V2_NOR_BOOT_SIZE);
+       platform_device_register(&wrt350n_v2_nor_flash);
++      platform_device_register(&wrt350n_v2_button_device);
++      platform_device_register(&wrt350n_v2_leds);
+ }
+ static int __init wrt350n_v2_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)