diff mbox series

[v4] leds: pwm-multicolor: Disable PWM when going to suspend

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

Commit Message

Jakob Riepler Dec. 16, 2024, 9:37 p.m. UTC
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(-)

Comments

Uwe Kleine-König Dec. 17, 2024, 8:55 a.m. UTC | #1
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
Lee Jones Dec. 17, 2024, 3:05 p.m. UTC | #2
On Mon, 16 Dec 2024 22:37:55 +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.
> 
> 

Applied, thanks!

[1/1] leds: pwm-multicolor: Disable PWM when going to suspend
      commit: 29df7025cff00dd9fa7cacbec979ede97ee775eb

--
Lee Jones [李琼斯]
Uwe Kleine-König Dec. 19, 2024, 8:11 a.m. UTC | #3
Hello Lee,

On Tue, Dec 17, 2024 at 03:05:06PM +0000, Lee Jones wrote:
> On Mon, 16 Dec 2024 22:37:55 +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.
> > 
> > 
> 
> Applied, thanks!
> 
> [1/1] leds: pwm-multicolor: Disable PWM when going to suspend
>       commit: 29df7025cff00dd9fa7cacbec979ede97ee775eb

Where is this applied? I checked today's next and even after

	for b in for-leds-next for-leds-next-next leds-fixes master; do git fetch git://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git refs/heads/$b; done

I don't have the above commit object and these branches don't seem to
contain the commit with a different commit id either.

Best regards
Uwe
Lee Jones Dec. 19, 2024, 8:25 a.m. UTC | #4
On Thu, 19 Dec 2024, Uwe Kleine-König wrote:

> Hello Lee,
> 
> On Tue, Dec 17, 2024 at 03:05:06PM +0000, Lee Jones wrote:
> > On Mon, 16 Dec 2024 22:37:55 +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.
> > > 
> > > 
> > 
> > Applied, thanks!
> > 
> > [1/1] leds: pwm-multicolor: Disable PWM when going to suspend
> >       commit: 29df7025cff00dd9fa7cacbec979ede97ee775eb
> 
> Where is this applied? I checked today's next and even after
> 
> 	for b in for-leds-next for-leds-next-next leds-fixes master; do git fetch git://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git refs/heads/$b; done
> 
> I don't have the above commit object and these branches don't seem to
> contain the commit with a different commit id either.

Check again tomorrow. :)
Uwe Kleine-König Dec. 19, 2024, 1:49 p.m. UTC | #5
Hello Lee,

On Thu, Dec 19, 2024 at 08:25:04AM +0000, Lee Jones wrote:
> On Thu, 19 Dec 2024, Uwe Kleine-König wrote:
> > On Tue, Dec 17, 2024 at 03:05:06PM +0000, Lee Jones wrote:
> > > Applied, thanks!
> > > 
> > > [1/1] leds: pwm-multicolor: Disable PWM when going to suspend
> > >       commit: 29df7025cff00dd9fa7cacbec979ede97ee775eb
> > 
> > Where is this applied? I checked today's next and even after
> > 
> > 	for b in for-leds-next for-leds-next-next leds-fixes master; do git fetch git://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git refs/heads/$b; done
> > 
> > I don't have the above commit object and these branches don't seem to
> > contain the commit with a different commit id either.
> 
> Check again tomorrow. :)

I was impatient and found the commit now in your for-leds-next branch. I
wanted to double check that there is no encoding problem. Everything is
fine.

Thanks
Uwe
diff mbox series

Patch

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)