Message ID | 20240920-bcm63138-leds-v1-3-c150871324a0@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | leds: bcm63138: Add some new bindings and code | expand |
On 9/20/24 14:59, Linus Walleij wrote: > This adds code to optionally read the width of the shift register > chain from the device tree and use it to set up the register > controlling the shifter hardware. > > If the property is not present, the boot-time default is used so > existing device trees keep working as this is what they assume. > > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- > drivers/leds/blink/leds-bcm63138.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/leds/blink/leds-bcm63138.c b/drivers/leds/blink/leds-bcm63138.c > index 374f68f4f277..bf170a5bb12a 100644 > --- a/drivers/leds/blink/leds-bcm63138.c > +++ b/drivers/leds/blink/leds-bcm63138.c > @@ -2,6 +2,7 @@ > /* > * Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl> > */ > +#include <linux/bits.h> > #include <linux/cleanup.h> > #include <linux/delay.h> > #include <linux/io.h> > @@ -254,6 +255,7 @@ static int bcm63138_leds_probe(struct platform_device *pdev) > struct device_node *np = dev_of_node(&pdev->dev); > struct device *dev = &pdev->dev; > struct bcm63138_leds *leds; > + u32 shift_bits; > > leds = devm_kzalloc(dev, sizeof(*leds), GFP_KERNEL); > if (!leds) > @@ -267,6 +269,12 @@ static int bcm63138_leds_probe(struct platform_device *pdev) > > spin_lock_init(&leds->lock); > > + /* If this property is not present, we use boot defaults */ > + if (!of_property_read_u32(np, "brcm,serial-shift-bits", &shift_bits)) { > + bcm63138_leds_write(leds, BCM63138_SERIAL_LED_SHIFT_SEL, > + GENMASK(32 - shift_bits - 1, 0)); In the binding you allow a value of up to 32 for that property, but that would lead to 32 - 32 - 1, which would be undefined?
> -----Original Message----- > From: Linus Walleij <linus.walleij@linaro.org> > Sent: Friday, September 20, 2024 2:59 PM > To: Pavel Machek <pavel@ucw.cz>; Lee Jones <lee@kernel.org>; Rob > Herring <robh@kernel.org>; Krzysztof Kozlowski <krzk+dt@kernel.org>; > Conor Dooley <conor+dt@kernel.org>; William Zhang > <william.zhang@broadcom.com>; Anand Gore > <anand.gore@broadcom.com>; Kursad Oney > <kursad.oney@broadcom.com>; Florian Fainelli > <florian.fainelli@broadcom.com>; Rafał Miłecki <rafal@milecki.pl>; > Broadcom internal kernel review list <bcm-kernel-feedback- > list@broadcom.com> > Cc: linux-leds@vger.kernel.org; devicetree@vger.kernel.org; Linus Walleij > <linus.walleij@linaro.org> > Subject: [PATCH 3/4] leds: bcm63128: Handle shift register config typo: bcm63128 -> bcm63138 > > This adds code to optionally read the width of the shift register > chain from the device tree and use it to set up the register > controlling the shifter hardware. > > If the property is not present, the boot-time default is used so > existing device trees keep working as this is what they assume. > > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- > drivers/leds/blink/leds-bcm63138.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/leds/blink/leds-bcm63138.c b/drivers/leds/blink/leds- > bcm63138.c > index 374f68f4f277..bf170a5bb12a 100644 > --- a/drivers/leds/blink/leds-bcm63138.c > +++ b/drivers/leds/blink/leds-bcm63138.c > @@ -2,6 +2,7 @@ > /* > * Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl> > */ > +#include <linux/bits.h> > #include <linux/cleanup.h> > #include <linux/delay.h> > #include <linux/io.h> > @@ -254,6 +255,7 @@ static int bcm63138_leds_probe(struct > platform_device *pdev) > struct device_node *np = dev_of_node(&pdev->dev); > struct device *dev = &pdev->dev; > struct bcm63138_leds *leds; > + u32 shift_bits; > > leds = devm_kzalloc(dev, sizeof(*leds), GFP_KERNEL); > if (!leds) > @@ -267,6 +269,12 @@ static int bcm63138_leds_probe(struct > platform_device *pdev) > > spin_lock_init(&leds->lock); > > + /* If this property is not present, we use boot defaults */ > + if (!of_property_read_u32(np, "brcm,serial-shift-bits", &shift_bits)) { > + bcm63138_leds_write(leds, > BCM63138_SERIAL_LED_SHIFT_SEL, > + GENMASK(32 - shift_bits - 1, 0)); > + } > + > bcm63138_leds_write(leds, BCM63138_GLB_CTRL, > BCM63138_GLB_CTRL_SERIAL_LED_DATA_PPOL | > BCM63138_GLB_CTRL_SERIAL_LED_EN_POL); > > -- > 2.46.0
diff --git a/drivers/leds/blink/leds-bcm63138.c b/drivers/leds/blink/leds-bcm63138.c index 374f68f4f277..bf170a5bb12a 100644 --- a/drivers/leds/blink/leds-bcm63138.c +++ b/drivers/leds/blink/leds-bcm63138.c @@ -2,6 +2,7 @@ /* * Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl> */ +#include <linux/bits.h> #include <linux/cleanup.h> #include <linux/delay.h> #include <linux/io.h> @@ -254,6 +255,7 @@ static int bcm63138_leds_probe(struct platform_device *pdev) struct device_node *np = dev_of_node(&pdev->dev); struct device *dev = &pdev->dev; struct bcm63138_leds *leds; + u32 shift_bits; leds = devm_kzalloc(dev, sizeof(*leds), GFP_KERNEL); if (!leds) @@ -267,6 +269,12 @@ static int bcm63138_leds_probe(struct platform_device *pdev) spin_lock_init(&leds->lock); + /* If this property is not present, we use boot defaults */ + if (!of_property_read_u32(np, "brcm,serial-shift-bits", &shift_bits)) { + bcm63138_leds_write(leds, BCM63138_SERIAL_LED_SHIFT_SEL, + GENMASK(32 - shift_bits - 1, 0)); + } + bcm63138_leds_write(leds, BCM63138_GLB_CTRL, BCM63138_GLB_CTRL_SERIAL_LED_DATA_PPOL | BCM63138_GLB_CTRL_SERIAL_LED_EN_POL);
This adds code to optionally read the width of the shift register chain from the device tree and use it to set up the register controlling the shifter hardware. If the property is not present, the boot-time default is used so existing device trees keep working as this is what they assume. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/leds/blink/leds-bcm63138.c | 8 ++++++++ 1 file changed, 8 insertions(+)