[PATCH v3 05/10] leds: pca995x: Write global registers before creating LED devices

From: Nora Schiffer

Date: Tue Sep 22 2026 - 10:56:25 EST


The hardware setup should be finished before the devices become visible
to userspace.

Signed-off-by: Nora Schiffer <nora.schiffer@xxxxxxxxxxxxxxx>
---
drivers/leds/leds-pca995x.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/leds/leds-pca995x.c b/drivers/leds/leds-pca995x.c
index 079ce3d8f1e49..e6122b33451ed 100644
--- a/drivers/leds/leds-pca995x.c
+++ b/drivers/leds/leds-pca995x.c
@@ -159,6 +159,16 @@ static int pca995x_probe(struct i2c_client *client)
led->ldev.max_brightness = 255;
}

+ /* Disable LED all-call address and set normal mode */
+ ret = regmap_write(chip->regmap, PCA995X_MODE1, PCA995X_MODE1_CFG);
+ if (ret)
+ goto err_put_nodes;
+
+ /* IREF Output current value for all LEDn outputs */
+ ret = regmap_write(chip->regmap, chipdef->irefall, PCA995X_IREFALL_HALF_CFG);
+ if (ret)
+ goto err_put_nodes;
+
for (i = 0; i < chipdef->num_leds; i++) {
struct led_init_data init_data = {};

@@ -179,13 +189,7 @@ static int pca995x_probe(struct i2c_client *client)
led_fwnodes[i] = NULL;
}

- /* Disable LED all-call address and set normal mode */
- ret = regmap_write(chip->regmap, PCA995X_MODE1, PCA995X_MODE1_CFG);
- if (ret)
- return ret;
-
- /* IREF Output current value for all LEDn outputs */
- return regmap_write(chip->regmap, chipdef->irefall, PCA995X_IREFALL_HALF_CFG);
+ return 0;

err_put_nodes:
for (i = 0; i < chipdef->num_leds; i++)
--
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
https://www.tq-group.com/