diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2014-01-14 06:14:41 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-01-24 16:39:51 -0500 |
commit | 515fa75d4845c424c853a727a4f02b0e02340370 (patch) | |
tree | aff49e83e72804e9bf1eb4cd2cc253263950cdf3 /arch/mips/bcm47xx/leds.c | |
parent | 76b573e46016eabc79e6764a458a559a30dfa7e9 (diff) |
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>
Signed-off-by: John Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/6299/
Diffstat (limited to 'arch/mips/bcm47xx/leds.c')
-rw-r--r-- | arch/mips/bcm47xx/leds.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/arch/mips/bcm47xx/leds.c b/arch/mips/bcm47xx/leds.c new file mode 100644 index 000000000000..6a49d4c6c9c3 --- /dev/null +++ b/arch/mips/bcm47xx/leds.c | |||
@@ -0,0 +1,73 @@ | |||
1 | #include "bcm47xx_private.h" | ||
2 | |||
3 | #include <linux/leds.h> | ||
4 | #include <bcm47xx_board.h> | ||
5 | |||
6 | static const struct gpio_led | ||
7 | bcm47xx_leds_netgear_wndr4500_v1_leds[] __initconst = { | ||
8 | { | ||
9 | .name = "bcm47xx:green:wps", | ||
10 | .gpio = 1, | ||
11 | .active_low = 1, | ||
12 | .default_state = LEDS_GPIO_DEFSTATE_KEEP, | ||
13 | }, | ||
14 | { | ||
15 | .name = "bcm47xx:green:power", | ||
16 | .gpio = 2, | ||
17 | .active_low = 1, | ||
18 | .default_state = LEDS_GPIO_DEFSTATE_KEEP, | ||
19 | }, | ||
20 | { | ||
21 | .name = "bcm47xx:orange:power", | ||
22 | .gpio = 3, | ||
23 | .active_low = 1, | ||
24 | .default_state = LEDS_GPIO_DEFSTATE_KEEP, | ||
25 | }, | ||
26 | { | ||
27 | .name = "bcm47xx:green:usb1", | ||
28 | .gpio = 8, | ||
29 | .active_low = 1, | ||
30 | .default_state = LEDS_GPIO_DEFSTATE_KEEP, | ||
31 | }, | ||
32 | { | ||
33 | .name = "bcm47xx:green:2ghz", | ||
34 | .gpio = 9, | ||
35 | .active_low = 1, | ||
36 | .default_state = LEDS_GPIO_DEFSTATE_KEEP, | ||
37 | }, | ||
38 | { | ||
39 | .name = "bcm47xx:blue:5ghz", | ||
40 | .gpio = 11, | ||
41 | .active_low = 1, | ||
42 | .default_state = LEDS_GPIO_DEFSTATE_KEEP, | ||
43 | }, | ||
44 | { | ||
45 | .name = "bcm47xx:green:usb2", | ||
46 | .gpio = 14, | ||
47 | .active_low = 1, | ||
48 | .default_state = LEDS_GPIO_DEFSTATE_KEEP, | ||
49 | }, | ||
50 | }; | ||
51 | |||
52 | static struct gpio_led_platform_data bcm47xx_leds_pdata; | ||
53 | |||
54 | #define bcm47xx_set_pdata(dev_leds) do { \ | ||
55 | bcm47xx_leds_pdata.leds = dev_leds; \ | ||
56 | bcm47xx_leds_pdata.num_leds = ARRAY_SIZE(dev_leds); \ | ||
57 | } while (0) | ||
58 | |||
59 | void __init bcm47xx_leds_register(void) | ||
60 | { | ||
61 | enum bcm47xx_board board = bcm47xx_board_get(); | ||
62 | |||
63 | switch (board) { | ||
64 | case BCM47XX_BOARD_NETGEAR_WNDR4500V1: | ||
65 | bcm47xx_set_pdata(bcm47xx_leds_netgear_wndr4500_v1_leds); | ||
66 | break; | ||
67 | default: | ||
68 | pr_debug("No LEDs configuration found for this device\n"); | ||
69 | return; | ||
70 | } | ||
71 | |||
72 | gpio_led_register_device(-1, &bcm47xx_leds_pdata); | ||
73 | } | ||