mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 01:34:00 +08:00
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
@ -66,9 +66,11 @@ 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->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)
|
||||
schedule_work(&led_dat->work);
|
||||
|
Loading…
Reference in New Issue
Block a user