summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMarek Vasut <[email protected]>2022-04-22 15:34:00 +0200
committerTom Rini <[email protected]>2022-04-28 09:26:43 -0400
commit01074697801bc0709ac2ca915250096311ec1b7e (patch)
treecb70616ba6e61fa923c36f2d8be7bcc551984bb7 /drivers
parente3aa76644c2af14631a1fb5ba17022e0a396a6c4 (diff)
led: gpio: Use NOP uclass driver for top-level node
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 <[email protected]> Cc: Patrice Chotard <[email protected]> Cc: Patrick Delaunay <[email protected]> Cc: Sean Anderson <[email protected]> Cc: Simon Glass <[email protected]> Cc: Steven Lawrance <[email protected]> Reviewed-by: Patrice Chotard <[email protected]> Tested-by: Patrice Chotard <[email protected]>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/led/led_gpio.c30
1 files 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,
+};