pwm_backlight: pass correct brightness to callback
authorAlexandre Courbot <acourbot@nvidia.com>
Mon, 9 Jul 2012 06:04:23 +0000 (15:04 +0900)
committerThierry Reding <thierry.reding@avionic-design.de>
Mon, 23 Jul 2012 11:24:04 +0000 (13:24 +0200)
pwm_backlight_update_status calls the notify() and notify_after()
callbacks before and after applying the new PWM settings. However, if
brightness levels are used, the brightness value will be changed from
the index into the levels array to the PWM duty cycle length before
being passed to notify_after(), which results in inconsistent behavior.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
drivers/video/backlight/pwm_bl.c

index 057389d69a51c5ce7d473ab45b058d9e2978fc34..995f0164c9b082c7da2836123adfcb2b7f10a6c7 100644 (file)
@@ -54,14 +54,18 @@ static int pwm_backlight_update_status(struct backlight_device *bl)
                pwm_config(pb->pwm, 0, pb->period);
                pwm_disable(pb->pwm);
        } else {
+               int duty_cycle;
+
                if (pb->levels) {
-                       brightness = pb->levels[brightness];
+                       duty_cycle = pb->levels[brightness];
                        max = pb->levels[max];
+               } else {
+                       duty_cycle = brightness;
                }
 
-               brightness = pb->lth_brightness +
-                       (brightness * (pb->period - pb->lth_brightness) / max);
-               pwm_config(pb->pwm, brightness, pb->period);
+               duty_cycle = pb->lth_brightness +
+                    (duty_cycle * (pb->period - pb->lth_brightness) / max);
+               pwm_config(pb->pwm, duty_cycle, pb->period);
                pwm_enable(pb->pwm);
        }