diff options
Diffstat (limited to 'target/linux/brcm47xx/patches-3.10/120-MIPS-BCM47XX-Prepare-support-for-LEDs.patch')
-rw-r--r-- | target/linux/brcm47xx/patches-3.10/120-MIPS-BCM47XX-Prepare-support-for-LEDs.patch | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.10/120-MIPS-BCM47XX-Prepare-support-for-LEDs.patch b/target/linux/brcm47xx/patches-3.10/120-MIPS-BCM47XX-Prepare-support-for-LEDs.patch new file mode 100644 index 0000000000..424d1f0a76 --- /dev/null +++ b/target/linux/brcm47xx/patches-3.10/120-MIPS-BCM47XX-Prepare-support-for-LEDs.patch @@ -0,0 +1,160 @@ +From 98e54a60a7346ef31cb851b670a238ad428b58fe Mon Sep 17 00:00:00 2001 +From: Rafa? Mi?ecki <zajec5@gmail.com> +Date: Thu, 2 Jan 2014 13:27:15 +0100 +Subject: [PATCH 029/110] MIPS: BCM47XX: Prepare support for LEDs + +So far this is mostly just a proof of concept, database consists of a +single device. Creating a nice iterateable array wasn't an option +because devices have different amount of LEDs. And we don't want to +waste memory just because of support for a device with dozens on LEDs. + +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/6299/ +--- + arch/mips/bcm47xx/Kconfig | 2 + + arch/mips/bcm47xx/Makefile | 2 +- + arch/mips/bcm47xx/bcm47xx_private.h | 9 +++++ + arch/mips/bcm47xx/leds.c | 73 +++++++++++++++++++++++++++++++++++ + arch/mips/bcm47xx/setup.c | 6 +++ + 5 files changed, 91 insertions(+), 1 deletion(-) + create mode 100644 arch/mips/bcm47xx/bcm47xx_private.h + create mode 100644 arch/mips/bcm47xx/leds.c + +--- a/arch/mips/bcm47xx/Kconfig ++++ b/arch/mips/bcm47xx/Kconfig +@@ -12,6 +12,7 @@ config BCM47XX_SSB + select SSB_PCICORE_HOSTMODE if PCI + select SSB_DRIVER_GPIO + select GPIOLIB ++ select LEDS_GPIO_REGISTER + default y + help + Add support for old Broadcom BCM47xx boards with Sonics Silicon Backplane support. +@@ -29,6 +30,7 @@ config BCM47XX_BCMA + select BCMA_DRIVER_PCI_HOSTMODE if PCI + select BCMA_DRIVER_GPIO + select GPIOLIB ++ select LEDS_GPIO_REGISTER + default y + help + Add support for new Broadcom BCM47xx boards with Broadcom specific Advanced Microcontroller Bus. +--- 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 ++obj-y += board.o leds.o + obj-$(CONFIG_BCM47XX_SSB) += wgt634u.o +--- /dev/null ++++ b/arch/mips/bcm47xx/bcm47xx_private.h +@@ -0,0 +1,9 @@ ++#ifndef LINUX_BCM47XX_PRIVATE_H_ ++#define LINUX_BCM47XX_PRIVATE_H_ ++ ++#include <linux/kernel.h> ++ ++/* leds.c */ ++void __init bcm47xx_leds_register(void); ++ ++#endif +--- /dev/null ++++ b/arch/mips/bcm47xx/leds.c +@@ -0,0 +1,73 @@ ++#include "bcm47xx_private.h" ++ ++#include <linux/leds.h> ++#include <bcm47xx_board.h> ++ ++static const struct gpio_led ++bcm47xx_leds_netgear_wndr4500_v1_leds[] __initconst = { ++ { ++ .name = "bcm47xx:green:wps", ++ .gpio = 1, ++ .active_low = 1, ++ .default_state = LEDS_GPIO_DEFSTATE_KEEP, ++ }, ++ { ++ .name = "bcm47xx:green:power", ++ .gpio = 2, ++ .active_low = 1, ++ .default_state = LEDS_GPIO_DEFSTATE_KEEP, ++ }, ++ { ++ .name = "bcm47xx:orange:power", ++ .gpio = 3, ++ .active_low = 1, ++ .default_state = LEDS_GPIO_DEFSTATE_KEEP, ++ }, ++ { ++ .name = "bcm47xx:green:usb1", ++ .gpio = 8, ++ .active_low = 1, ++ .default_state = LEDS_GPIO_DEFSTATE_KEEP, ++ }, ++ { ++ .name = "bcm47xx:green:2ghz", ++ .gpio = 9, ++ .active_low = 1, ++ .default_state = LEDS_GPIO_DEFSTATE_KEEP, ++ }, ++ { ++ .name = "bcm47xx:blue:5ghz", ++ .gpio = 11, ++ .active_low = 1, ++ .default_state = LEDS_GPIO_DEFSTATE_KEEP, ++ }, ++ { ++ .name = "bcm47xx:green:usb2", ++ .gpio = 14, ++ .active_low = 1, ++ .default_state = LEDS_GPIO_DEFSTATE_KEEP, ++ }, ++}; ++ ++static struct gpio_led_platform_data bcm47xx_leds_pdata; ++ ++#define bcm47xx_set_pdata(dev_leds) do { \ ++ bcm47xx_leds_pdata.leds = dev_leds; \ ++ bcm47xx_leds_pdata.num_leds = ARRAY_SIZE(dev_leds); \ ++} while (0) ++ ++void __init bcm47xx_leds_register(void) ++{ ++ enum bcm47xx_board board = bcm47xx_board_get(); ++ ++ switch (board) { ++ case BCM47XX_BOARD_NETGEAR_WNDR4500V1: ++ bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500_v1_leds); ++ break; ++ default: ++ pr_debug("No LEDs configuration found for this device\n"); ++ return; ++ } ++ ++ gpio_led_register_device(-1, &bcm47xx_leds_pdata); ++} +--- a/arch/mips/bcm47xx/setup.c ++++ b/arch/mips/bcm47xx/setup.c +@@ -26,6 +26,8 @@ + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + ++#include "bcm47xx_private.h" ++ + #include <linux/export.h> + #include <linux/types.h> + #include <linux/ssb/ssb.h> +@@ -243,6 +245,9 @@ static int __init bcm47xx_register_bus_c + break; + #endif + } ++ ++ bcm47xx_leds_register(); ++ + return 0; + } + device_initcall(bcm47xx_register_bus_complete); |