* [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* Re: [PATCH] leds: pwm: Fix active-low brightness with default-state keep
2026-11-09 8:58 [PATCH] leds: pwm: Fix active-low brightness with default-state keep raoxu
@ 2026-11-09 9:02 ` sashiko-bot
0 siblings, 0 replies; 2+ messages in thread
From: sashiko-bot @ 2026-11-09 9:02 UTC (permalink / raw)
To: raoxu; +Cc: linux-leds, lee
> 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>
Sashiko has reviewed this patch and found no issues.
--
Sashiko AI review · https://sashiko.dev/#/patchset/9524E319B9AF9D1A+20261109085822.3755803-1-raoxu@uniontech.com?part=1
^ permalink raw reply [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