leds: leds-pwm: fix duty time overflow.
Overflow maybe occurs when calculates the duty time. For instance, the period time is 990000000ns, and the max_brightness is 127, when setting the brightness to 12, the duty value will be 25906026ns, but it should be 93543307ns. Signed-off-by: Bryan Wu <cooloney@gmail.com>
This commit is contained in:
parent
3df22c06b9
commit
fc1aee038b
1 changed files with 4 additions and 2 deletions
|
@ -66,9 +66,11 @@ static void led_pwm_set(struct led_classdev *led_cdev,
|
||||||
struct led_pwm_data *led_dat =
|
struct led_pwm_data *led_dat =
|
||||||
container_of(led_cdev, struct led_pwm_data, cdev);
|
container_of(led_cdev, struct led_pwm_data, cdev);
|
||||||
unsigned int max = led_dat->cdev.max_brightness;
|
unsigned int max = led_dat->cdev.max_brightness;
|
||||||
unsigned int period = led_dat->period;
|
unsigned long long duty = led_dat->period;
|
||||||
|
|
||||||
led_dat->duty = brightness * period / max;
|
duty *= brightness;
|
||||||
|
do_div(duty, max);
|
||||||
|
led_dat->duty = duty;
|
||||||
|
|
||||||
if (led_dat->can_sleep)
|
if (led_dat->can_sleep)
|
||||||
schedule_work(&led_dat->work);
|
schedule_work(&led_dat->work);
|
||||||
|
|
Loading…
Add table
Reference in a new issue