Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Linux: Kernel

[PATCH] leds: leds-pwm: Set led_classdev max_brightness

 

 

Linux kernel RSS feed   Index | Next | Previous | View Threaded


lars at metafoo

Nov 26, 2009, 9:17 PM

Post #1 of 2 (158 views)
Permalink
[PATCH] leds: leds-pwm: Set led_classdev max_brightness

Currently the driver leds-pwm doesn't set max_brightness for the led device
although it's platform data proides a maximum brightness. Instead it stores its
own private driver struct. The max_brightness defaults to 255 for led device if
it has not been set.
As a result any leds-pwm device with a different maximum brightness will show
incorrect behavior, as it is posible to either set a longer then period duty
time or not be able to switch the led to full brightness.

Signed-off-by: Lars-Peter Clausen <lars [at] metafoo>
---
drivers/leds/leds-pwm.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
index cdfdc87..88b1dd0 100644
--- a/drivers/leds/leds-pwm.c
+++ b/drivers/leds/leds-pwm.c
@@ -27,7 +27,6 @@ struct led_pwm_data {
struct pwm_device *pwm;
unsigned int active_low;
unsigned int period;
- unsigned int max_brightness;
};

static void led_pwm_set(struct led_classdev *led_cdev,
@@ -35,7 +34,7 @@ static void led_pwm_set(struct led_classdev *led_cdev,
{
struct led_pwm_data *led_dat =
container_of(led_cdev, struct led_pwm_data, cdev);
- unsigned int max = led_dat->max_brightness;
+ unsigned int max = led_dat->cdev.max_brightness;
unsigned int period = led_dat->period;

if (brightness == 0) {
@@ -77,10 +76,10 @@ static int led_pwm_probe(struct platform_device *pdev)
led_dat->cdev.name = cur_led->name;
led_dat->cdev.default_trigger = cur_led->default_trigger;
led_dat->active_low = cur_led->active_low;
- led_dat->max_brightness = cur_led->max_brightness;
led_dat->period = cur_led->pwm_period_ns;
led_dat->cdev.brightness_set = led_pwm_set;
led_dat->cdev.brightness = LED_OFF;
+ led_dat->cdev.max_brightness = cur_led->max_brightness;
led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;

ret = led_classdev_register(&pdev->dev, &led_dat->cdev);
--
1.5.6.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo [at] vger
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/


l.fu at pengutronix

Nov 26, 2009, 11:44 PM

Post #2 of 2 (143 views)
Permalink
Re: [PATCH] leds: leds-pwm: Set led_classdev max_brightness [In reply to]

Hi Lars-Peter,

On Fri, Nov 27, 2009 at 06:17:38AM +0100, Lars-Peter Clausen wrote:
> Currently the driver leds-pwm doesn't set max_brightness for the led device
> although it's platform data proides a maximum brightness. Instead it stores its
> own private driver struct. The max_brightness defaults to 255 for led device if
> it has not been set.
> As a result any leds-pwm device with a different maximum brightness will show
> incorrect behavior, as it is posible to either set a longer then period duty
> time or not be able to switch the led to full brightness.
>
> Signed-off-by: Lars-Peter Clausen <lars [at] metafoo>

Thanks for the patch, however Pls note that the pwm framework has seen
some major changes by Bill Gatliff, including this driver, see
http://lwn.net/Articles/357837/
The patches are pending, but it's quite possible that this driver will
become obsolete soon.
for the patch it self:

Acked-by: Luotao Fu <l.fu [at] pengutronix>

> ---
> drivers/leds/leds-pwm.c | 5 ++---
> 1 files changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
> index cdfdc87..88b1dd0 100644
> --- a/drivers/leds/leds-pwm.c
> +++ b/drivers/leds/leds-pwm.c
> @@ -27,7 +27,6 @@ struct led_pwm_data {
> struct pwm_device *pwm;
> unsigned int active_low;
> unsigned int period;
> - unsigned int max_brightness;
> };
>
> static void led_pwm_set(struct led_classdev *led_cdev,
> @@ -35,7 +34,7 @@ static void led_pwm_set(struct led_classdev *led_cdev,
> {
> struct led_pwm_data *led_dat =
> container_of(led_cdev, struct led_pwm_data, cdev);
> - unsigned int max = led_dat->max_brightness;
> + unsigned int max = led_dat->cdev.max_brightness;
> unsigned int period = led_dat->period;
>
> if (brightness == 0) {
> @@ -77,10 +76,10 @@ static int led_pwm_probe(struct platform_device *pdev)
> led_dat->cdev.name = cur_led->name;
> led_dat->cdev.default_trigger = cur_led->default_trigger;
> led_dat->active_low = cur_led->active_low;
> - led_dat->max_brightness = cur_led->max_brightness;
> led_dat->period = cur_led->pwm_period_ns;
> led_dat->cdev.brightness_set = led_pwm_set;
> led_dat->cdev.brightness = LED_OFF;
> + led_dat->cdev.max_brightness = cur_led->max_brightness;
> led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
>
> ret = led_classdev_register(&pdev->dev, &led_dat->cdev);
> --
> 1.5.6.5
>

cheers
Luotao Fu
--
Pengutronix e.K. | Dipl.-Ing. Luotao Fu |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Attachments: signature.asc (0.19 KB)

Linux kernel RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.