]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
leds: bcm63138: Handle shift register config
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 10 Oct 2024 14:10:52 +0000 (16:10 +0200)
committerLee Jones <lee@kernel.org>
Fri, 11 Oct 2024 07:37:12 +0000 (08:37 +0100)
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>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://lore.kernel.org/r/20241010-bcm63138-leds-v4-3-cdb80780a555@linaro.org
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/blink/leds-bcm63138.c

index 374f68f4f277c54356598e8f512219ceff274d58..9fe1af156c80197ded2a90d911fe7ec2c98b432c 100644 (file)
@@ -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(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);