summaryrefslogtreecommitdiff
path: root/target/linux/orion/patches-2.6.32/090-wrt350nv2_gpio_leds_buttons.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/orion/patches-2.6.32/090-wrt350nv2_gpio_leds_buttons.patch')
-rw-r--r--target/linux/orion/patches-2.6.32/090-wrt350nv2_gpio_leds_buttons.patch102
1 files changed, 102 insertions, 0 deletions
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
index 0000000000..30f75fc8af
--- /dev/null
+++ b/target/linux/orion/patches-2.6.32/090-wrt350nv2_gpio_leds_buttons.patch
@@ -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)