[PATCH 2/2] leds: fix led_brightness_set when soft-blinking

From: Fabio Baltieri
Date: Tue Jun 05 2012 - 17:37:27 EST


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@xxxxxxxxx>
Cc: Bryan Wu <bryan.wu@xxxxxxxxxxxxx>
---
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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/