[U-Boot] [PATCH 1/2] add generic stubs for GPIO LEDs

Simon Glass sjg at chromium.org
Sun Aug 23 23:21:47 CEST 2015


Hi Bernard,

On 21 August 2015 at 07:13, Bernhard Nortmann <bernhard.nortmann at web.de> wrote:
> For boards that support LEDs driven via GPIO (CONFIG_GPIO_LED),
> it may be useful to have some generic stubs (wrapper functions)
> for the "colored" LEDs.
>
> This allows defining STATUS_LED_* values directly to GPIO numbers,
> e.g.: #define STATUS_LED_GREEN  248 /* = PH24 */
>
> To keep those optional, it's probably best to introduce an additional
> configuration setting. I've chosen CONFIG_GPIO_LED_STUBS for that.
> Placing the code in drivers/misc/gpio_led.c also ensures that it
> automatically depends on CONFIG_GPIO_LED too.
>
> Signed-off-by: Bernhard Nortmann <bernhard.nortmann at web.de>
> ---
>
>  drivers/misc/gpio_led.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 54 insertions(+)

If this is a new option it should be added to Kconfig. Otherwise:

Reviewed-by: Simon Glass <sjg at chromium.org>

I am not a huge fan of the existing API. I would suggest that if you
have the energy you could replace it with something like:

enum led_colour_t {
   led_red,
   red_green,
   ...
};

int led_set_on(enum led_colour_t colour, bool on)

BTW there is a device-tree-enabled LED driver node (see drivers/led).
It might be worth considering using this on some sunxi boards.

>
> diff --git a/drivers/misc/gpio_led.c b/drivers/misc/gpio_led.c
> index 3e95727..164c30d 100644
> --- a/drivers/misc/gpio_led.c
> +++ b/drivers/misc/gpio_led.c
> @@ -51,3 +51,57 @@ void __led_toggle(led_id_t mask)
>  {
>         gpio_set_value(mask, !gpio_get_value(mask));
>  }
> +
> +#ifdef CONFIG_GPIO_LED_STUBS
> +
> +/* 'generic' override of colored LED stubs, to use GPIO functions instead */
> +
> +#ifdef STATUS_LED_RED
> +void red_led_on(void)
> +{
> +       __led_set(STATUS_LED_RED, STATUS_LED_ON);
> +}
> +
> +void red_led_off(void)
> +{
> +       __led_set(STATUS_LED_RED, STATUS_LED_OFF);
> +}
> +#endif
> +
> +#ifdef STATUS_LED_GREEN
> +void green_led_on(void)
> +{
> +       __led_set(STATUS_LED_GREEN, STATUS_LED_ON);
> +}
> +
> +void green_led_off(void)
> +{
> +       __led_set(STATUS_LED_GREEN, STATUS_LED_OFF);
> +}
> +#endif
> +
> +#ifdef STATUS_LED_YELLOW
> +void yellow_led_on(void)
> +{
> +       __led_set(STATUS_LED_YELLOW, STATUS_LED_ON);
> +}
> +
> +void yellow_led_off(void)
> +{
> +       __led_set(STATUS_LED_YELLOW, STATUS_LED_OFF);
> +}
> +#endif
> +
> +#ifdef STATUS_LED_BLUE
> +void blue_led_on(void)
> +{
> +       __led_set(STATUS_LED_BLUE, STATUS_LED_ON);
> +}
> +
> +void blue_led_off(void)
> +{
> +       __led_set(STATUS_LED_BLUE, STATUS_LED_OFF);
> +}
> +#endif
> +
> +#endif /* CONFIG_GPIO_LED_STUBS */
> --
> 2.4.6
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

Regards,
Simon


More information about the U-Boot mailing list