linux-mips
[Top] [All Lists]

Re: [PATCH V3] MIPS: BCM47XX: Prepare support for LEDs

To: Rafał Miłecki <zajec5@gmail.com>, linux-mips@linux-mips.org
Subject: Re: [PATCH V3] MIPS: BCM47XX: Prepare support for LEDs
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Thu, 07 Nov 2013 00:08:52 +0100
In-reply-to: <1383772274-12571-1-git-send-email-zajec5@gmail.com>
List-archive: <http://www.linux-mips.org/archives/linux-mips/>
List-help: <mailto:ecartis@linux-mips.org?Subject=help>
List-id: linux-mips <linux-mips.eddie.linux-mips.org>
List-owner: <mailto:ralf@linux-mips.org>
List-post: <mailto:linux-mips@linux-mips.org>
List-software: Ecartis version 1.0.0
List-subscribe: <mailto:ecartis@linux-mips.org?subject=subscribe%20linux-mips>
List-unsubscribe: <mailto:ecartis@linux-mips.org?subject=unsubscribe%20linux-mips>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <1383771746-31119-1-git-send-email-zajec5@gmail.com> <1383772274-12571-1-git-send-email-zajec5@gmail.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.0
On 11/06/2013 10:11 PM, Rafał Miłecki wrote:
> 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>

> ---
> V2: use bcm47xx_private.h instead of ugly define in setup.c
> V3: don't add #include <bcm47xx_data.h> in setup.c. No need to.
> ---
>  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           |    5 +++
>  5 files changed, 90 insertions(+), 1 deletion(-)
>  create mode 100644 arch/mips/bcm47xx/bcm47xx_private.h
>  create mode 100644 arch/mips/bcm47xx/leds.c
> 
> diff --git a/arch/mips/bcm47xx/Kconfig b/arch/mips/bcm47xx/Kconfig
> index ba61192..81a3d28 100644
> --- 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.
> @@ -28,6 +29,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.
> diff --git a/arch/mips/bcm47xx/Makefile b/arch/mips/bcm47xx/Makefile
> index 571c15e..8d4a66c 100644
> --- a/arch/mips/bcm47xx/Makefile
> +++ b/arch/mips/bcm47xx/Makefile
> @@ -4,6 +4,6 @@
>  #
>  
>  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-y                                += gpio.o
>  obj-y                                += cfe_env.o
> diff --git a/arch/mips/bcm47xx/bcm47xx_private.h 
> b/arch/mips/bcm47xx/bcm47xx_private.h
> new file mode 100644
> index 0000000..1a1e600
> --- /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
> diff --git a/arch/mips/bcm47xx/leds.c b/arch/mips/bcm47xx/leds.c
> new file mode 100644
> index 0000000..6a49d4c
> --- /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);
> +}
> diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c
> index 4b1e229..5291bda 100644
> --- 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>
> @@ -272,6 +274,9 @@ static int __init bcm47xx_register_bus_complete(void)
>               break;
>  #endif
>       }
> +
> +     bcm47xx_leds_register();
> +
>       return 0;
>  }
>  device_initcall(bcm47xx_register_bus_complete);
> 


<Prev in Thread] Current Thread [Next in Thread>