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

Commit 76931edd authored by Stas Sergeev's avatar Stas Sergeev Committed by Bryan Wu
Browse files

leds: fix brightness changing when software blinking is active



The following sequence:
echo timer >/sys/class/leds/<name>/trigger
echo 1 >/sys/class/leds/<name>/brightness
should change the ON brightness for blinking.
The function led_set_brightness() was mistakenly initiating the
delayed blink stop procedure, which resulted in no blinking with
the timer trigger still active.

This patch fixes the problem by changing led_set_brightness()
to not initiate the delayed blink stop when brightness is not 0.

CC: Richard Purdie <rpurdie@rpsys.net>
CC: Kyungmin Park <kyungmin.park@samsung.com>
CC: linux-leds@vger.kernel.org
CC: linux-kernel@vger.kernel.org

Acked-by: default avatarJacek Anaszewski <j.anaszewski@samsung.com>
Signed-off-by: default avatarStas Sergeev <stsp@users.sourceforge.net>
Signed-off-by: default avatarBryan Wu <cooloney@gmail.com>
parent 7ff6b232
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -121,6 +121,11 @@ static void led_timer_function(unsigned long data)
	brightness = led_get_brightness(led_cdev);
	if (!brightness) {
		/* Time to switch the LED on. */
		if (led_cdev->delayed_set_value) {
			led_cdev->blink_brightness =
					led_cdev->delayed_set_value;
			led_cdev->delayed_set_value = 0;
		}
		brightness = led_cdev->blink_brightness;
		delay = led_cdev->blink_delay_on;
	} else {
+3 −2
Original line number Diff line number Diff line
@@ -119,9 +119,10 @@ void led_set_brightness(struct led_classdev *led_cdev,
{
	int ret = 0;

	/* delay brightness setting if need to stop soft-blink timer */
	/* delay brightness if soft-blink is active */
	if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) {
		led_cdev->delayed_set_value = brightness;
		if (brightness == LED_OFF)
			schedule_work(&led_cdev->set_brightness_work);
		return;
	}