summaryrefslogtreecommitdiff
path: root/drivers/leds
diff options
context:
space:
mode:
authorChristian Marangi <ansuelsmth@gmail.com>2024-07-12 02:45:53 +0200
committerLee Jones <lee@kernel.org>2024-07-12 08:32:37 +0100
commit2a498d626df7e8d97e798799ebbc30d0482d52e8 (patch)
tree076c8be2b2a18a22fd3e8e4dd757ad4ce234377c /drivers/leds
parent9c5fd279255cacc5a759e77a7eb1824d708b21d2 (diff)
downloadlwn-2a498d626df7e8d97e798799ebbc30d0482d52e8.tar.gz
lwn-2a498d626df7e8d97e798799ebbc30d0482d52e8.zip
leds: leds-lp5569: Better handle enabling clock internal setting
Better handle enabling clock internal setting. In further testing it was notice that internal clock config MUST be set before clock output config or the LED CHIP might stop working. This wasn't documented and was actually found on devices that have 2 chip chained where one chip provide clock for the other. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> Link: https://lore.kernel.org/r/20240712004556.15601-2-ansuelsmth@gmail.com Signed-off-by: Lee Jones <lee@kernel.org>
Diffstat (limited to 'drivers/leds')
-rw-r--r--drivers/leds/leds-lp5569.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/leds/leds-lp5569.c b/drivers/leds/leds-lp5569.c
index 2253c19f0cd2..c976b10b6558 100644
--- a/drivers/leds/leds-lp5569.c
+++ b/drivers/leds/leds-lp5569.c
@@ -180,20 +180,25 @@ static int lp5569_post_init_device(struct lp55xx_chip *chip)
val = LP5569_DEFAULT_CONFIG;
val |= FIELD_PREP(LP5569_CP_MODE_MASK, chip->pdata->charge_pump_mode);
+ ret = lp55xx_write(chip, LP5569_REG_MISC, val);
+ if (ret)
+ return ret;
if (chip->pdata->clock_mode == LP55XX_CLOCK_INT) {
+ /* Internal clock MUST be configured before CLK output */
+ ret = lp55xx_update_bits(chip, LP5569_REG_MISC,
+ LP5569_INTERNAL_CLK,
+ LP5569_INTERNAL_CLK);
+ if (ret)
+ return ret;
+
ret = lp55xx_update_bits(chip, LP5569_REG_IO_CONTROL,
LP5569_CLK_OUTPUT,
LP5569_CLK_OUTPUT);
if (ret)
return ret;
-
- val |= LP5569_INTERNAL_CLK;
}
- ret = lp55xx_write(chip, LP5569_REG_MISC, val);
- if (ret)
- return ret;
return lp5569_init_program_engine(chip);
}