[PATCH 6/7] leds: pca995x: do not use full on LED mode
From: Nora Schiffer
Date: Wed Sep 02 2026 - 08:31:58 EST
LEDs in full on mode are unaffected by group dimming. Avoid using it,
so group dimming is applied consistently.
This slightly changes the brightness at maximum (from 100% to 255/256
duty cycle), which should be imperceptible; arguably it is also more
consistent with the other brightness levels, as it will now scale
linearly from 0/256 to 255/256 over the whole range.
Signed-off-by: Nora Schiffer <nora.schiffer@xxxxxxxxxxxxxxx>
---
drivers/leds/leds-pca995x.c | 33 ++++++++++++++-------------------
1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/drivers/leds/leds-pca995x.c b/drivers/leds/leds-pca995x.c
index 2232b74528a53..62f2764661b9d 100644
--- a/drivers/leds/leds-pca995x.c
+++ b/drivers/leds/leds-pca995x.c
@@ -98,28 +98,23 @@ static int pca995x_brightness_set(struct led_classdev *led_cdev,
ledout_addr = PCA995X_LEDOUT0 + (led->led_no / PCA995X_OUTPUTS_PER_REG);
shift = PCA995X_LDRX_BITS * (led->led_no % PCA995X_OUTPUTS_PER_REG);
- switch (brightness) {
- case LED_FULL:
- return regmap_update_bits(chip->regmap, ledout_addr,
- PCA995X_LDRX_MASK << shift,
- PCA995X_LED_ON << shift);
- case LED_OFF:
+ if (brightness == LED_OFF) {
return regmap_update_bits(chip->regmap, ledout_addr,
PCA995X_LDRX_MASK << shift, 0);
- default:
- /* Adjust brightness as per user input by changing individual PWM */
- ret = regmap_write(chip->regmap, pwmout_addr, brightness);
- if (ret)
- return ret;
-
- /*
- * Change LDRx configuration to individual brightness via PWM.
- * LED will stop blinking if it's doing so.
- */
- return regmap_update_bits(chip->regmap, ledout_addr,
- PCA995X_LDRX_MASK << shift,
- PCA995X_LED_PWM_MODE << shift);
}
+
+ /* Adjust brightness as per user input by changing individual PWM */
+ ret = regmap_write(chip->regmap, pwmout_addr, brightness);
+ if (ret)
+ return ret;
+
+ /*
+ * Change LDRx configuration to individual brightness via PWM.
+ * LED will stop blinking if it's doing so.
+ */
+ return regmap_update_bits(chip->regmap, ledout_addr,
+ PCA995X_LDRX_MASK << shift,
+ PCA995X_LED_PWM_MODE << shift);
}
static ssize_t status_show(struct device *dev, struct device_attribute *attr, char *buf)
--
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/