aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/leds/led-class.c1
-rw-r--r--drivers/leds/led-core.c5
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 3c7e3487b373..85848c5da705 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -57,6 +57,7 @@ static ssize_t brightness_store(struct device *dev,
57 if (state == LED_OFF) 57 if (state == LED_OFF)
58 led_trigger_remove(led_cdev); 58 led_trigger_remove(led_cdev);
59 led_set_brightness(led_cdev, state); 59 led_set_brightness(led_cdev, state);
60 flush_work(&led_cdev->set_brightness_work);
60 61
61 ret = size; 62 ret = size;
62unlock: 63unlock:
diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c
index e3da7c03da1b..e9ae7f87ab90 100644
--- a/drivers/leds/led-core.c
+++ b/drivers/leds/led-core.c
@@ -164,6 +164,11 @@ static void led_blink_setup(struct led_classdev *led_cdev,
164 unsigned long *delay_on, 164 unsigned long *delay_on,
165 unsigned long *delay_off) 165 unsigned long *delay_off)
166{ 166{
167 /*
168 * If "set brightness to 0" is pending in workqueue, we don't
169 * want that to be reordered after blink_set()
170 */
171 flush_work(&led_cdev->set_brightness_work);
167 if (!test_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags) && 172 if (!test_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags) &&
168 led_cdev->blink_set && 173 led_cdev->blink_set &&
169 !led_cdev->blink_set(led_cdev, delay_on, delay_off)) 174 !led_cdev->blink_set(led_cdev, delay_on, delay_off))