Linux LED subsystem development
 help / color / mirror / Atom feed
* [PATCH] leds: pwm: Fix active-low brightness with default-state keep
@ 2026-11-09  8:58 raoxu
  2026-11-09  9:02 ` sashiko-bot
  0 siblings, 1 reply; 2+ messages in thread
From: raoxu @ 2026-11-09  8:58 UTC (permalink / raw)
  To: lee
  Cc: pavel, griffin, Denis.Osterland, linux-leds, linux-kernel, raoxu,
	stable

From: Xu Rao <raoxu@uniontech.com>

With default-state set to "keep", led_pwm_add() derives the initial
brightness from the PWM duty cycle without accounting for active-low
LEDs. However, led_pwm_set() inverts the duty cycle for these LEDs.

For an enabled active-low PWM with zero duty cycle, the LED is fully
on but its cached brightness is set to zero. Conversely, a full duty
cycle is reported as maximum brightness instead of off. This exposes
an incorrect brightness to userspace and can restore the wrong value
after suspend. With an optional enable GPIO, the incorrect brightness
also causes the wrong initial GPIO level to be selected.

Invert the computed brightness for active-low LEDs, matching the
conversion used by led_pwm_set() while leaving the PWM state intact.

The supplied fix was reviewed and this commit message prepared with
OpenCode AI assistance.

Fixes: 3d3d65bd2764 ("leds: pwm: add support for default-state device property")
Signed-off-by: Xu Rao <raoxu@uniontech.com>
Cc: stable@vger.kernel.org
---
 drivers/leds/leds-pwm.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
index 6c1f2f50ff85..da307767dbe8 100644
--- a/drivers/leds/leds-pwm.c
+++ b/drivers/leds/leds-pwm.c
@@ -131,6 +131,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
 		brightness = led->max_brightness;
 		brightness *= led_data->pwmstate.duty_cycle;
 		do_div(brightness, led_data->pwmstate.period);
+		if (led_data->active_low)
+			brightness = led->max_brightness - brightness;
 		led_data->cdev.brightness = brightness;
 		}
 		break;
--
2.50.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-11-09  9:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-09  8:58 [PATCH] leds: pwm: Fix active-low brightness with default-state keep raoxu
2026-11-09  9:02 ` sashiko-bot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox