]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
drivers: led: bcm6753: do not use null label to find the top
authorPhilippe Reynes <philippe.reynes@softathome.com>
Thu, 29 Jun 2023 09:25:23 +0000 (11:25 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 14 Jul 2023 19:21:08 +0000 (15:21 -0400)
This driver considers that a node with an empty label is the top.
But the led class has changed, if a label is not provided for a led,
the label is filed with the node name. So we update this driver
to use a wrapper to manage the top led node.

Signed-off-by: Philippe Reynes <philippe.reynes@softathome.com>
drivers/led/led_bcm6753.c

index 88b650cbfca3fabf5b4d2e916696195c99c47d7b..2466d9301166379bfd0382b20665fa0a5f26eca8 100644 (file)
@@ -174,57 +174,65 @@ static const struct led_ops bcm6753_led_ops = {
 
 static int bcm6753_led_probe(struct udevice *dev)
 {
-       struct led_uc_plat *uc_plat = dev_get_uclass_plat(dev);
-
-       /* Top-level LED node */
-       if (!uc_plat->label) {
-               void __iomem *regs;
-               u32 set_bits = 0;
-
-               regs = dev_remap_addr(dev);
-               if (!regs)
-                       return -EINVAL;
-
-               if (dev_read_bool(dev, "brcm,serial-led-msb-first"))
-                       set_bits |= CLED_CTRL_SERIAL_LED_MSB_FIRST;
-               if (dev_read_bool(dev, "brcm,serial-led-en-pol"))
-                       set_bits |= CLED_CTRL_SERIAL_LED_EN_POL;
-               if (dev_read_bool(dev, "brcm,serial-led-clk-pol"))
-                       set_bits |= CLED_CTRL_SERIAL_LED_CLK_POL;
-               if (dev_read_bool(dev, "brcm,serial-led-data-ppol"))
-                       set_bits |= CLED_CTRL_SERIAL_LED_DATA_PPOL;
-
-               clrsetbits_32(regs + CLED_CTRL_REG, CLED_CTRL_MASK, set_bits);
-       } else {
-               struct bcm6753_led_priv *priv = dev_get_priv(dev);
-               void __iomem *regs;
-               unsigned int pin;
-
-               regs = dev_remap_addr(dev_get_parent(dev));
-               if (!regs)
-                       return -EINVAL;
-
-               pin = dev_read_u32_default(dev, "reg", LEDS_MAX);
-               if (pin >= LEDS_MAX)
-                       return -EINVAL;
-
-               priv->regs = regs;
-               priv->pin = pin;
-
-               /* this led is managed by software */
-               clrbits_32(regs + CLED_HW_LED_EN_REG, 1 << pin);
-
-               /* configure the polarity */
-               if (dev_read_bool(dev, "active-low"))
-                       clrbits_32(regs + CLED_PLED_OP_PPOL_REG, 1 << pin);
-               else
-                       setbits_32(regs + CLED_PLED_OP_PPOL_REG, 1 << pin);
-       }
+       struct bcm6753_led_priv *priv = dev_get_priv(dev);
+       void __iomem *regs;
+       unsigned int pin;
+
+       regs = dev_remap_addr(dev_get_parent(dev));
+       if (!regs)
+               return -EINVAL;
+
+       pin = dev_read_u32_default(dev, "reg", LEDS_MAX);
+       if (pin >= LEDS_MAX)
+               return -EINVAL;
+
+       priv->regs = regs;
+       priv->pin = pin;
+
+       /* this led is managed by software */
+       clrbits_32(regs + CLED_HW_LED_EN_REG, 1 << pin);
+
+       /* configure the polarity */
+       if (dev_read_bool(dev, "active-low"))
+               clrbits_32(regs + CLED_PLED_OP_PPOL_REG, 1 << pin);
+       else
+               setbits_32(regs + CLED_PLED_OP_PPOL_REG, 1 << pin);
 
        return 0;
 }
 
-static int bcm6753_led_bind(struct udevice *parent)
+U_BOOT_DRIVER(bcm6753_led) = {
+       .name = "bcm6753-led",
+       .id = UCLASS_LED,
+       .probe = bcm6753_led_probe,
+       .priv_auto = sizeof(struct bcm6753_led_priv),
+       .ops = &bcm6753_led_ops,
+};
+
+static int bcm6753_led_wrap_probe(struct udevice *dev)
+{
+       void __iomem *regs;
+       u32 set_bits = 0;
+
+       regs = dev_remap_addr(dev);
+       if (!regs)
+               return -EINVAL;
+
+       if (dev_read_bool(dev, "brcm,serial-led-msb-first"))
+               set_bits |= CLED_CTRL_SERIAL_LED_MSB_FIRST;
+       if (dev_read_bool(dev, "brcm,serial-led-en-pol"))
+               set_bits |= CLED_CTRL_SERIAL_LED_EN_POL;
+       if (dev_read_bool(dev, "brcm,serial-led-clk-pol"))
+               set_bits |= CLED_CTRL_SERIAL_LED_CLK_POL;
+       if (dev_read_bool(dev, "brcm,serial-led-data-ppol"))
+               set_bits |= CLED_CTRL_SERIAL_LED_DATA_PPOL;
+
+       clrsetbits_32(regs + CLED_CTRL_REG, CLED_CTRL_MASK, set_bits);
+
+       return 0;
+}
+
+static int bcm6753_led_wrap_bind(struct udevice *parent)
 {
        ofnode node;
 
@@ -247,12 +255,10 @@ static const struct udevice_id bcm6753_led_ids[] = {
        { /* sentinel */ }
 };
 
-U_BOOT_DRIVER(bcm6753_led) = {
-       .name = "bcm6753-led",
-       .id = UCLASS_LED,
+U_BOOT_DRIVER(bcm6753_led_wrap) = {
+       .name   = "bcm6753_led_wrap",
+       .id     = UCLASS_NOP,
        .of_match = bcm6753_led_ids,
-       .bind = bcm6753_led_bind,
-       .probe = bcm6753_led_probe,
-       .priv_auto = sizeof(struct bcm6753_led_priv),
-       .ops = &bcm6753_led_ops,
+       .probe = bcm6753_led_wrap_probe,
+       .bind = bcm6753_led_wrap_bind,
 };