2019-02-10 12:45:49

by Yisheng Xie

[permalink] [raw]
Subject: [PATCH] leds: pwm: fix max_brightness works abnormal when active_low

When leds-pwm is active_low, smaller number of duty kept in led_dat
means less brighness, so we should disable pwm when led_dat->duty is
equal to period instead of zero, which means max_brightness.

Signed-off-by: Yisheng Xie <[email protected]>
---
drivers/leds/leds-pwm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
index df80c89..07fb772 100644
--- a/drivers/leds/leds-pwm.c
+++ b/drivers/leds/leds-pwm.c
@@ -41,7 +41,7 @@ static void __led_pwm_set(struct led_pwm_data *led_dat)

pwm_config(led_dat->pwm, new_duty, led_dat->period);

- if (new_duty == 0)
+ if (led_dat->active_low ? new_duty == led_dat->period : new_duty == 0)
pwm_disable(led_dat->pwm);
else
pwm_enable(led_dat->pwm);
--
1.9.1




2019-02-10 16:39:58

by Pavel Machek

[permalink] [raw]
Subject: Re: [PATCH] leds: pwm: fix max_brightness works abnormal when active_low

On Sun 2019-02-10 20:37:09, Yisheng Xie wrote:
> When leds-pwm is active_low, smaller number of duty kept in led_dat
> means less brighness, so we should disable pwm when led_dat->duty is
> equal to period instead of zero, which means max_brightness.

Will all pwm drivers leave the signal 'low' when pwm is disabled? Not
tristate or something?

Plus please use temporary variable. This is really hard to read.

Or maybe

led_dat->active_low * new_duty == led_dat->period

?
Pavel

> Signed-off-by: Yisheng Xie <[email protected]>
> ---
> drivers/leds/leds-pwm.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
> index df80c89..07fb772 100644
> --- a/drivers/leds/leds-pwm.c
> +++ b/drivers/leds/leds-pwm.c
> @@ -41,7 +41,7 @@ static void __led_pwm_set(struct led_pwm_data *led_dat)
>
> pwm_config(led_dat->pwm, new_duty, led_dat->period);
>
> - if (new_duty == 0)
> + if (led_dat->active_low ? new_duty == led_dat->period : new_duty == 0)
> pwm_disable(led_dat->pwm);
> else
> pwm_enable(led_dat->pwm);

--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html


Attachments:
(No filename) (1.25 kB)
signature.asc (188.00 B)
Digital signature
Download all attachments