[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