All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4] leds: pwm-multicolor: Disable PWM when going to suspend
@ 2024-12-16 21:37 Jakob Riepler
  2024-12-17  8:55 ` Uwe Kleine-König
  2024-12-17 15:05 ` (subset) " Lee Jones
  0 siblings, 2 replies; 6+ messages in thread
From: Jakob Riepler @ 2024-12-16 21:37 UTC (permalink / raw)
  To: Pavel Machek, Lee Jones
  Cc: linux-leds, linux-kernel, Uwe Kleine-König, Jakob Riepler,
	Uwe Kleine-König

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1584 bytes --]

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>
---
Changes in v2:
 - fix wrong line-breaks in patch
Changes in v3:
 - use git send-email
Changes in v4:
 - use correct address in s-o-b

 drivers/leds/rgb/leds-pwm-multicolor.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

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)
-- 
2.47.1


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

end of thread, other threads:[~2024-12-19 13:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-16 21:37 [PATCH v4] leds: pwm-multicolor: Disable PWM when going to suspend Jakob Riepler
2024-12-17  8:55 ` Uwe Kleine-König
2024-12-17 15:05 ` (subset) " Lee Jones
2024-12-19  8:11   ` Uwe Kleine-König
2024-12-19  8:25     ` Lee Jones
2024-12-19 13:49       ` Uwe Kleine-König

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.