]> www.infradead.org Git - users/jedix/linux-maple.git/commit
leds: rgb: leds-qcom-lpg: Fix pwm resolution max for normal PWMs
authorAbel Vesa <abel.vesa@linaro.org>
Wed, 5 Mar 2025 13:09:04 +0000 (15:09 +0200)
committerLee Jones <lee@kernel.org>
Fri, 21 Mar 2025 09:21:58 +0000 (09:21 +0000)
commit2fc21e4d6fb13145db665e5edaf4129066cc86b5
tree95fcb6856b44d9c528dfbc812928bde991840c14
parent835a0c10d33b54607f49edffbbeaea4c4cdcc49c
leds: rgb: leds-qcom-lpg: Fix pwm resolution max for normal PWMs

Ideally, the requested duty cycle should never translate to a PWM
value higher than the selected resolution (PWM size), but currently the
best matched period is never reported back to the PWM consumer, so the
consumer will still be using the requested period which is higher than
the best matched one. This will result in PWM consumer requesting
duty cycle values higher than the allowed PWM value.

For example, a consumer might request a period of 5ms while the best
(closest) period the PWM hardware will do is 4.26ms. For this best
matched resolution, if the selected resolution is 9-bit wide, when
the consumer asks for a duty cycle of 5ms, the PWM value will be 600,
which is outside of what the resolution allows. Similar will happen
if the 6-bit resolution is selected.

Since for these normal PWMs (non Hi-Res), the current implementation is
capping the PWM value at a 9-bit resolution, even when the 6-bit
resolution is selected, the value will be wrapped around to 6-bit value
by the HW internal logic.

Fix the issue by capping the PWM value to the maximum value allowed by
the selected resolution.

Fixes: 7a3350495d9a ("leds: rgb: leds-qcom-lpg: Add support for 6-bit PWM resolution")
Suggested-by: Anjelique Melendez <anjelique.melendez@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
Reviewed-by: Sebastian Reichel <sre@kernel.org>
Link: https://lore.kernel.org/r/20250305-leds-qcom-lpg-fix-max-pwm-on-hi-res-v4-1-bfe124a53a9f@linaro.org
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/rgb/leds-qcom-lpg.c