diff options
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.patch | 102 |
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) |