Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc1aee03 authored by Xiubo Li's avatar Xiubo Li Committed by Bryan Wu
Browse files

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: default avatarBryan Wu <cooloney@gmail.com>
parent 3df22c06
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -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);