Hi Matthieu, I was to send this fix for 4.15-rc5, but just realized the possible mistake in the subject. Would you mind if I did the following amendment?: s/active_off/delay_off/ -- Best regards, Jacek Anaszewski On 12/13/2017 09:16 PM, Jacek Anaszewski wrote: > Hi Matthieu, > > Thanks for catching this. Applied. > > On 12/12/2017 11:10 AM, Matthieu CASTET wrote: >> With the current code, the following sequence won't work : >> echo timer > trigger >> >> echo 0 > delay_off >> * at this point we call >> ** led_delay_off_store >> ** led_blink_set >> *** stop timer >> ** led_blink_setup >> ** led_set_software_blink >> *** if !delay_on, led off >> *** if !delay_off, set led_set_brightness_nosleep <--- LED_BLINK_SW is set but timer is stop >> *** otherwise start timer/set LED_BLINK_SW flag >> >> echo xxx > brightness >> * led_set_brightness >> ** if LED_BLINK_SW >> *** if brightness=0, led off >> *** else apply brightness if next timer <--- timer is stop, and will never apply new setting >> ** otherwise set led_set_brightness_nosleep >> >> To fix that, when we delete the timer, we should clear LED_BLINK_SW. >> >> Cc: linux-leds@xxxxxxxxxxxxxxx >> Signed-off-by: Matthieu CASTET <matthieu.castet@xxxxxxxxxx> >> --- >> drivers/leds/led-core.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c >> index fd83c7f77a95..f3654fd2eaf3 100644 >> --- a/drivers/leds/led-core.c >> +++ b/drivers/leds/led-core.c >> @@ -186,7 +186,7 @@ void led_blink_set(struct led_classdev *led_cdev, >> unsigned long *delay_on, >> unsigned long *delay_off) >> { >> - del_timer_sync(&led_cdev->blink_timer); >> + led_stop_software_blink(led_cdev); >> >> clear_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags); >> clear_bit(LED_BLINK_ONESHOT_STOP, &led_cdev->work_flags); >> >