[PATCH] led: gpio: Use NOP uclass driver for top-level node

Patrice CHOTARD patrice.chotard at foss.st.com
Fri Apr 22 16:29:25 CEST 2022


Hi Marek

On 4/22/22 15:34, Marek Vasut wrote:
> The top level DT node of gpio-leds is not a LED itself, bind NOP uclass
> driver to it, and bind different LED uclass driver to its subnodes which
> represent the actual LEDs. This simplifies the probe() implementation
> and fixes the bogus top-level not-an-LED in 'led list' command output:
> 
> ```
> => led list
> led             Error -121 <--- This is removed/fixed by this patch
> green:user0     off
> ```
> 
> Signed-off-by: Marek Vasut <marex at denx.de>
> Cc: Patrice Chotard <patrice.chotard at foss.st.com>
> Cc: Patrick Delaunay <patrick.delaunay at foss.st.com>
> Cc: Sean Anderson <seanga2 at gmail.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Steven Lawrance <steven.lawrance at softathome.com>
> ---
>  drivers/led/led_gpio.c | 30 +++++++++++++-----------------
>  1 file changed, 13 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/led/led_gpio.c b/drivers/led/led_gpio.c
> index 23156907593..fbed151b5d9 100644
> --- a/drivers/led/led_gpio.c
> +++ b/drivers/led/led_gpio.c
> @@ -58,17 +58,8 @@ static enum led_state_t gpio_led_get_state(struct udevice *dev)
>  static int led_gpio_probe(struct udevice *dev)
>  {
>  	struct led_gpio_priv *priv = dev_get_priv(dev);
> -	int ret;
> -
> -	/* Ignore the top-level LED node */
> -	if (device_is_compatible(dev, "gpio-leds"))
> -		return 0;
> -
> -	ret = gpio_request_by_name(dev, "gpios", 0, &priv->gpio, GPIOD_IS_OUT);
> -	if (ret)
> -		return ret;
>  
> -	return 0;
> +	return gpio_request_by_name(dev, "gpios", 0, &priv->gpio, GPIOD_IS_OUT);
>  }
>  
>  static int led_gpio_remove(struct udevice *dev)
> @@ -109,18 +100,23 @@ static const struct led_ops gpio_led_ops = {
>  	.get_state	= gpio_led_get_state,
>  };
>  
> -static const struct udevice_id led_gpio_ids[] = {
> -	{ .compatible = "gpio-leds" },
> -	{ }
> -};
> -
>  U_BOOT_DRIVER(led_gpio) = {
>  	.name	= "gpio_led",
>  	.id	= UCLASS_LED,
> -	.of_match = led_gpio_ids,
>  	.ops	= &gpio_led_ops,
>  	.priv_auto	= sizeof(struct led_gpio_priv),
> -	.bind	= led_gpio_bind,
>  	.probe	= led_gpio_probe,
>  	.remove	= led_gpio_remove,
>  };
> +
> +static const struct udevice_id led_gpio_ids[] = {
> +	{ .compatible = "gpio-leds" },
> +	{ }
> +};
> +
> +U_BOOT_DRIVER(led_gpio_wrap) = {
> +	.name	= "gpio_led_wrap",
> +	.id	= UCLASS_NOP,
> +	.of_match = led_gpio_ids,
> +	.bind	= led_gpio_bind,
> +};

Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>
Tested-by: Patrice Chotard <patrice.chotard at foss.st.com>

Tested on stm32mp157c-dk2
Thanks
Patrice


Thanks


More information about the U-Boot mailing list