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