[PATCH] drivers: led: bcm6858: do not use null label to find the top

Philippe REYNES philippe.reynes at softathome.com
Tue Jul 18 11:20:52 CEST 2023


Hi Tom,

For this patch, I see that it is accepted on patchwork:
https://patchwork.ozlabs.org/project/uboot/patch/20230623163642.241034-1-philippe.reynes@softathome.com/
But I don't see it in master/next.

Is it a "miss" or I have to update it please ?

Regards,
Philippe



Le 23/06/2023 à 18:36, Philippe Reynes a écrit :
> 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 at softathome.com>
> ---
>   drivers/led/led_bcm6858.c | 122 ++++++++++++++++++++------------------
>   1 file changed, 64 insertions(+), 58 deletions(-)
>
> diff --git a/drivers/led/led_bcm6858.c b/drivers/led/led_bcm6858.c
> index 6b3698674b..397dc0d869 100644
> --- a/drivers/led/led_bcm6858.c
> +++ b/drivers/led/led_bcm6858.c
> @@ -180,63 +180,71 @@ static const struct led_ops bcm6858_led_ops = {
>   
>   static int bcm6858_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 |= LED_CTRL_SERIAL_LED_MSB_FIRST;
> -		if (dev_read_bool(dev, "brcm,serial-led-en-pol"))
> -			set_bits |= LED_CTRL_SERIAL_LED_EN_POL;
> -		if (dev_read_bool(dev, "brcm,serial-led-clk-pol"))
> -			set_bits |= LED_CTRL_SERIAL_LED_CLK_POL;
> -		if (dev_read_bool(dev, "brcm,serial-led-data-ppol"))
> -			set_bits |= LED_CTRL_SERIAL_LED_DATA_PPOL;
> -		if (dev_read_bool(dev, "brcm,led-test-mode"))
> -			set_bits |= LED_CTRL_LED_TEST_MODE;
> -
> -		clrsetbits_32(regs + LED_CTRL_REG, ~0, set_bits);
> -	} else {
> -		struct bcm6858_led_priv *priv = dev_get_priv(dev);
> -		void __iomem *regs;
> -		unsigned int pin, brightness;
> -
> -		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 + LED_HW_LED_EN_REG, 1 << pin);
> -
> -		/* configure the polarity */
> -		if (dev_read_bool(dev, "active-low"))
> -			clrbits_32(regs + LED_PLED_OP_PPOL_REG, 1 << pin);
> -		else
> -			setbits_32(regs + LED_PLED_OP_PPOL_REG, 1 << pin);
> +	struct bcm6858_led_priv *priv = dev_get_priv(dev);
> +	void __iomem *regs;
> +	unsigned int pin, brightness;
> +
> +	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 + LED_HW_LED_EN_REG, 1 << pin);
>   
> -		brightness = dev_read_u32_default(dev, "default-brightness",
> +	/* configure the polarity */
> +	if (dev_read_bool(dev, "active-low"))
> +		clrbits_32(regs + LED_PLED_OP_PPOL_REG, 1 << pin);
> +	else
> +		setbits_32(regs + LED_PLED_OP_PPOL_REG, 1 << pin);
> +
> +	brightness = dev_read_u32_default(dev, "default-brightness",
>   						  LEDS_MAX_BRIGHTNESS);
> -		led_set_brightness(dev, brightness);
> -	}
> +	led_set_brightness(dev, brightness);
>   
>   	return 0;
>   }
>   
> -static int bcm6858_led_bind(struct udevice *parent)
> +U_BOOT_DRIVER(bcm6858_led) = {
> +	.name = "bcm6858-led",
> +	.id = UCLASS_LED,
> +	.probe = bcm6858_led_probe,
> +	.priv_auto	= sizeof(struct bcm6858_led_priv),
> +	.ops = &bcm6858_led_ops,
> +};
> +
> +static int bcm6858_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 |= LED_CTRL_SERIAL_LED_MSB_FIRST;
> +	if (dev_read_bool(dev, "brcm,serial-led-en-pol"))
> +		set_bits |= LED_CTRL_SERIAL_LED_EN_POL;
> +	if (dev_read_bool(dev, "brcm,serial-led-clk-pol"))
> +		set_bits |= LED_CTRL_SERIAL_LED_CLK_POL;
> +	if (dev_read_bool(dev, "brcm,serial-led-data-ppol"))
> +		set_bits |= LED_CTRL_SERIAL_LED_DATA_PPOL;
> +	if (dev_read_bool(dev, "brcm,led-test-mode"))
> +		set_bits |= LED_CTRL_LED_TEST_MODE;
> +
> +	clrsetbits_32(regs + LED_CTRL_REG, ~0, set_bits);
> +
> +	return 0;
> +}
> +
> +static int bcm6858_led_wrap_bind(struct udevice *parent)
>   {
>   	ofnode node;
>   
> @@ -259,12 +267,10 @@ static const struct udevice_id bcm6858_led_ids[] = {
>   	{ /* sentinel */ }
>   };
>   
> -U_BOOT_DRIVER(bcm6858_led) = {
> -	.name = "bcm6858-led",
> -	.id = UCLASS_LED,
> +U_BOOT_DRIVER(bcm6858_led_wrap) = {
> +	.name	= "bcm6858_led_wrap",
> +	.id	= UCLASS_NOP,
>   	.of_match = bcm6858_led_ids,
> -	.bind = bcm6858_led_bind,
> -	.probe = bcm6858_led_probe,
> -	.priv_auto	= sizeof(struct bcm6858_led_priv),
> -	.ops = &bcm6858_led_ops,
> +	.probe = bcm6858_led_wrap_probe,
> +	.bind = bcm6858_led_wrap_bind,
>   };


More information about the U-Boot mailing list