Messages in this thread Patch in this message | | | From | Fabio Baltieri <> | Subject | [PATCH 2/2] leds: fix led_brightness_set when soft-blinking | Date | Tue, 5 Jun 2012 23:38:59 +0200 |
| |
Change led_brightness_set to ensure software blink timer is stopped before calling led_stop_software_blink() and use led_set_brightness() instead of calling led_cdev->brightness_set() directly to ensure led_cdev->brightness is always consistent with current LED status.
This ensure proper cleaning when changing triggers, as without this fix a LED may be turned off while leaving it's led_cdev->brightness = 1, leading to an erratic software-blink behaviour.
The problem was easy to reproduce by changing the trigger from "timer" to "oneshot".
Signed-off-by: Fabio Baltieri <fabio.baltieri@gmail.com> Cc: Bryan Wu <bryan.wu@canonical.com> --- drivers/leds/led-core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c index 579eb78..3e9f934 100644 --- a/drivers/leds/led-core.c +++ b/drivers/leds/led-core.c @@ -115,7 +115,8 @@ EXPORT_SYMBOL(led_blink_set_oneshot); void led_brightness_set(struct led_classdev *led_cdev, enum led_brightness brightness) { + del_timer_sync(&led_cdev->blink_timer); led_stop_software_blink(led_cdev); - led_cdev->brightness_set(led_cdev, brightness); + led_set_brightness(led_cdev, brightness); } EXPORT_SYMBOL(led_brightness_set); -- 1.7.10.2.520.g6a4a482.dirty
| |