diff options
Diffstat (limited to 'drivers/leds/led-core.c')
-rw-r--r-- | drivers/leds/led-core.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c index 3495d5d6547f..3bce44893021 100644 --- a/drivers/leds/led-core.c +++ b/drivers/leds/led-core.c | |||
@@ -53,11 +53,12 @@ static void led_timer_function(unsigned long data) | |||
53 | 53 | ||
54 | if (!led_cdev->blink_delay_on || !led_cdev->blink_delay_off) { | 54 | if (!led_cdev->blink_delay_on || !led_cdev->blink_delay_off) { |
55 | led_set_brightness_nosleep(led_cdev, LED_OFF); | 55 | led_set_brightness_nosleep(led_cdev, LED_OFF); |
56 | led_cdev->flags &= ~LED_BLINK_SW; | ||
56 | return; | 57 | return; |
57 | } | 58 | } |
58 | 59 | ||
59 | if (led_cdev->flags & LED_BLINK_ONESHOT_STOP) { | 60 | if (led_cdev->flags & LED_BLINK_ONESHOT_STOP) { |
60 | led_cdev->flags &= ~LED_BLINK_ONESHOT_STOP; | 61 | led_cdev->flags &= ~(LED_BLINK_ONESHOT_STOP | LED_BLINK_SW); |
61 | return; | 62 | return; |
62 | } | 63 | } |
63 | 64 | ||
@@ -151,6 +152,7 @@ static void led_set_software_blink(struct led_classdev *led_cdev, | |||
151 | return; | 152 | return; |
152 | } | 153 | } |
153 | 154 | ||
155 | led_cdev->flags |= LED_BLINK_SW; | ||
154 | mod_timer(&led_cdev->blink_timer, jiffies + 1); | 156 | mod_timer(&led_cdev->blink_timer, jiffies + 1); |
155 | } | 157 | } |
156 | 158 | ||
@@ -219,6 +221,7 @@ void led_stop_software_blink(struct led_classdev *led_cdev) | |||
219 | del_timer_sync(&led_cdev->blink_timer); | 221 | del_timer_sync(&led_cdev->blink_timer); |
220 | led_cdev->blink_delay_on = 0; | 222 | led_cdev->blink_delay_on = 0; |
221 | led_cdev->blink_delay_off = 0; | 223 | led_cdev->blink_delay_off = 0; |
224 | led_cdev->flags &= ~LED_BLINK_SW; | ||
222 | } | 225 | } |
223 | EXPORT_SYMBOL_GPL(led_stop_software_blink); | 226 | EXPORT_SYMBOL_GPL(led_stop_software_blink); |
224 | 227 | ||
@@ -226,10 +229,10 @@ void led_set_brightness(struct led_classdev *led_cdev, | |||
226 | enum led_brightness brightness) | 229 | enum led_brightness brightness) |
227 | { | 230 | { |
228 | /* | 231 | /* |
229 | * In case blinking is on delay brightness setting | 232 | * If software blink is active, delay brightness setting |
230 | * until the next timer tick. | 233 | * until the next timer tick. |
231 | */ | 234 | */ |
232 | if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) { | 235 | if (led_cdev->flags & LED_BLINK_SW) { |
233 | /* | 236 | /* |
234 | * If we need to disable soft blinking delegate this to the | 237 | * If we need to disable soft blinking delegate this to the |
235 | * work queue task to avoid problems in case we are called | 238 | * work queue task to avoid problems in case we are called |