Commit 515fa75d authored by Rafał Miłecki's avatar Rafał Miłecki Committed by Ralf Baechle

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: default avatarRafał Miłecki <zajec5@gmail.com>
Acked-by: default avatarHauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: default avatarJohn Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/6299/
parent 76b573e4
...@@ -12,6 +12,7 @@ config BCM47XX_SSB ...@@ -12,6 +12,7 @@ config BCM47XX_SSB
select SSB_PCICORE_HOSTMODE if PCI select SSB_PCICORE_HOSTMODE if PCI
select SSB_DRIVER_GPIO select SSB_DRIVER_GPIO
select GPIOLIB select GPIOLIB
select LEDS_GPIO_REGISTER
default y default y
help help
Add support for old Broadcom BCM47xx boards with Sonics Silicon Backplane support. Add support for old Broadcom BCM47xx boards with Sonics Silicon Backplane support.
...@@ -29,6 +30,7 @@ config BCM47XX_BCMA ...@@ -29,6 +30,7 @@ config BCM47XX_BCMA
select BCMA_DRIVER_PCI_HOSTMODE if PCI select BCMA_DRIVER_PCI_HOSTMODE if PCI
select BCMA_DRIVER_GPIO select BCMA_DRIVER_GPIO
select GPIOLIB select GPIOLIB
select LEDS_GPIO_REGISTER
default y default y
help help
Add support for new Broadcom BCM47xx boards with Broadcom specific Advanced Microcontroller Bus. Add support for new Broadcom BCM47xx boards with Broadcom specific Advanced Microcontroller Bus.
......
...@@ -4,5 +4,5 @@ ...@@ -4,5 +4,5 @@
# #
obj-y += irq.o nvram.o prom.o serial.o setup.o time.o sprom.o 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 obj-$(CONFIG_BCM47XX_SSB) += wgt634u.o
#ifndef LINUX_BCM47XX_PRIVATE_H_
#define LINUX_BCM47XX_PRIVATE_H_
#include <linux/kernel.h>
/* leds.c */
void __init bcm47xx_leds_register(void);
#endif
#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);
}
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
* 675 Mass Ave, Cambridge, MA 02139, USA. * 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include "bcm47xx_private.h"
#include <linux/export.h> #include <linux/export.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/ssb/ssb.h> #include <linux/ssb/ssb.h>
...@@ -253,6 +255,8 @@ static int __init bcm47xx_register_bus_complete(void) ...@@ -253,6 +255,8 @@ static int __init bcm47xx_register_bus_complete(void)
break; break;
#endif #endif
} }
bcm47xx_leds_register();
return 0; return 0;
} }
device_initcall(bcm47xx_register_bus_complete); device_initcall(bcm47xx_register_bus_complete);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment