Message ID | 20241216213754.18374-2-jakob+lkml@paranoidlabs.org |
---|---|
State | New |
Headers | show |
Series | [v4] leds: pwm-multicolor: Disable PWM when going to suspend | expand |
On Mon, Dec 16, 2024 at 10:37:55PM +0100, Jakob Riepler wrote: > This fixes suspend on platforms like stm32mp1xx, where the PWM consumer > has to be disabled for the PWM to enter suspend. > Another positive side effect is that active-low LEDs now properly > turn off instead of going back to full brightness when they are set to 0. > > Link: https://lore.kernel.org/all/20240417153846.271751-2-u.kleine-koenig@pengutronix.de/ > Signed-off-by: Jakob Riepler <jakob+lkml@paranoidlabs.org> > Acked-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com> Now there are just nitpicks left: - Your S-o-b usually comes last. - The encoding of your mail is strange. It claims 8bit us-ascii which doesn't make sense. Depending on the mail reader and its locale my name might show as Uwe Kleine-K��nig. See also https://lore.kernel.org/all/20241216213754.18374-2-jakob+lkml@paranoidlabs.org/ which says "Warning: decoded text below may be mangled, UTF-8 assumed". Many maintainers don't care about the first item and if Lee has a sane environment my name makes it correctly into the git history. So from my side that's no reason for a v5, but for future patches it would be great to improve here. Best regards Uwe
diff --git a/drivers/leds/rgb/leds-pwm-multicolor.c b/drivers/leds/rgb/leds-pwm-multicolor.c index e1a81e0109e8..f80a06cc31f8 100644 --- a/drivers/leds/rgb/leds-pwm-multicolor.c +++ b/drivers/leds/rgb/leds-pwm-multicolor.c @@ -50,7 +50,13 @@ static int led_pwm_mc_set(struct led_classdev *cdev, duty = priv->leds[i].state.period - duty; priv->leds[i].state.duty_cycle = duty; - priv->leds[i].state.enabled = duty > 0; + /* + * Disabling a PWM doesn't guarantee that it emits the inactive level. + * So keep it on. Only for suspending the PWM should be disabled because + * otherwise it refuses to suspend. The possible downside is that the + * LED might stay (or even go) on. + */ + priv->leds[i].state.enabled = !(cdev->flags & LED_SUSPENDED); ret = pwm_apply_might_sleep(priv->leds[i].pwm, &priv->leds[i].state); if (ret)