Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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.
+1 −1
Original line number Diff line number Diff line
@@ -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
+9 −0
Original line number Diff line number Diff line
#ifndef LINUX_BCM47XX_PRIVATE_H_
#define LINUX_BCM47XX_PRIVATE_H_

#include <linux/kernel.h>

/* leds.c */
void __init bcm47xx_leds_register(void);

#endif
+73 −0
Original line number Diff line number Diff line
#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);
}
+4 −0
Original line number Diff line number Diff line
@@ -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>
@@ -253,6 +255,8 @@ static int __init bcm47xx_register_bus_complete(void)
		break;
#endif
	}
	bcm47xx_leds_register();

	return 0;
}
device_initcall(bcm47xx_register_bus_complete);