Commit 29df7025 authored by Jakob Riepler's avatar Jakob Riepler Committed by Lee Jones
Browse files

leds: pwm-multicolor: Disable PWM when going to suspend

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: default avatarJakob Riepler <jakob+lkml@paranoidlabs.org>
Acked-by: default avatarUwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/20241216213754.18374-2-jakob+lkml@paranoidlabs.org


Signed-off-by: default avatarLee Jones <lee@kernel.org>
parent 0508316b
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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)