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 <ma...@denx.de>
> Cc: Patrice Chotard <patrice.chot...@foss.st.com>
> Cc: Patrick Delaunay <patrick.delau...@foss.st.com>
> Cc: Sean Anderson <sean...@gmail.com>
> Cc: Simon Glass <s...@chromium.org>
> Cc: Steven Lawrance <steven.lawra...@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.chot...@foss.st.com>
Tested-by: Patrice Chotard <patrice.chot...@foss.st.com>

Tested on stm32mp157c-dk2
Thanks
Patrice


Thanks

Reply via email to