leds: bcm63138: Handle shift register config
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>
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user