diff options
| author | Jacek Anaszewski <j.anaszewski@samsung.com> | 2015-10-07 05:10:41 -0400 |
|---|---|---|
| committer | Jacek Anaszewski <j.anaszewski@samsung.com> | 2016-01-04 03:57:30 -0500 |
| commit | 81fe8e5b73e3f4de578ac7f53c1d956d4f58b8d4 (patch) | |
| tree | ff084840f52a554f7a902c7e1ffe54416e4c452f /drivers/leds/trigger | |
| parent | 437a4240f26461610cc0d90950b1c88348d9babe (diff) | |
leds: core: Add led_set_brightness_nosleep{nopm} functions
This patch adds led_set_brightness_nosleep() and led_set_brightness_nopm()
functions, that guarantee setting LED brightness in a non-blocking way.
The latter is used from pm_ops context and doesn't modify the brightness
cached in the struct led_classdev. Its execution always ends up with
a call to brightness setting op - either directly or through
a set_brightness_work, regardless of LED_SUSPENDED flag state.
The patch also replaces led_set_brightness_async() with
led_set_brightness_nosleep() in all places where the most vital was setting
brightness in a non sleeping way but not necessarily asynchronously, which
is not needed for non-blocking drivers.
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Diffstat (limited to 'drivers/leds/trigger')
| -rw-r--r-- | drivers/leds/trigger/ledtrig-backlight.c | 8 | ||||
| -rw-r--r-- | drivers/leds/trigger/ledtrig-default-on.c | 2 | ||||
| -rw-r--r-- | drivers/leds/trigger/ledtrig-gpio.c | 6 | ||||
| -rw-r--r-- | drivers/leds/trigger/ledtrig-heartbeat.c | 4 | ||||
| -rw-r--r-- | drivers/leds/trigger/ledtrig-oneshot.c | 4 | ||||
| -rw-r--r-- | drivers/leds/trigger/ledtrig-transient.c | 8 |
6 files changed, 16 insertions, 16 deletions
diff --git a/drivers/leds/trigger/ledtrig-backlight.c b/drivers/leds/trigger/ledtrig-backlight.c index 59eca17d9661..1ca1f1608f76 100644 --- a/drivers/leds/trigger/ledtrig-backlight.c +++ b/drivers/leds/trigger/ledtrig-backlight.c | |||
| @@ -51,9 +51,9 @@ static int fb_notifier_callback(struct notifier_block *p, | |||
| 51 | 51 | ||
| 52 | if ((n->old_status == UNBLANK) ^ n->invert) { | 52 | if ((n->old_status == UNBLANK) ^ n->invert) { |
| 53 | n->brightness = led->brightness; | 53 | n->brightness = led->brightness; |
| 54 | led_set_brightness_async(led, LED_OFF); | 54 | led_set_brightness_nosleep(led, LED_OFF); |
| 55 | } else { | 55 | } else { |
| 56 | led_set_brightness_async(led, n->brightness); | 56 | led_set_brightness_nosleep(led, n->brightness); |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | n->old_status = new_status; | 59 | n->old_status = new_status; |
| @@ -89,9 +89,9 @@ static ssize_t bl_trig_invert_store(struct device *dev, | |||
| 89 | 89 | ||
| 90 | /* After inverting, we need to update the LED. */ | 90 | /* After inverting, we need to update the LED. */ |
| 91 | if ((n->old_status == BLANK) ^ n->invert) | 91 | if ((n->old_status == BLANK) ^ n->invert) |
| 92 | led_set_brightness_async(led, LED_OFF); | 92 | led_set_brightness_nosleep(led, LED_OFF); |
| 93 | else | 93 | else |
| 94 | led_set_brightness_async(led, n->brightness); | 94 | led_set_brightness_nosleep(led, n->brightness); |
| 95 | 95 | ||
| 96 | return num; | 96 | return num; |
| 97 | } | 97 | } |
diff --git a/drivers/leds/trigger/ledtrig-default-on.c b/drivers/leds/trigger/ledtrig-default-on.c index 6f38f883aaf1..ff455cb46680 100644 --- a/drivers/leds/trigger/ledtrig-default-on.c +++ b/drivers/leds/trigger/ledtrig-default-on.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | 19 | ||
| 20 | static void defon_trig_activate(struct led_classdev *led_cdev) | 20 | static void defon_trig_activate(struct led_classdev *led_cdev) |
| 21 | { | 21 | { |
| 22 | led_set_brightness_async(led_cdev, led_cdev->max_brightness); | 22 | led_set_brightness_nosleep(led_cdev, led_cdev->max_brightness); |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | static struct led_trigger defon_led_trigger = { | 25 | static struct led_trigger defon_led_trigger = { |
diff --git a/drivers/leds/trigger/ledtrig-gpio.c b/drivers/leds/trigger/ledtrig-gpio.c index 4cc7040746c6..51288a45fbcb 100644 --- a/drivers/leds/trigger/ledtrig-gpio.c +++ b/drivers/leds/trigger/ledtrig-gpio.c | |||
| @@ -54,12 +54,12 @@ static void gpio_trig_work(struct work_struct *work) | |||
| 54 | 54 | ||
| 55 | if (tmp) { | 55 | if (tmp) { |
| 56 | if (gpio_data->desired_brightness) | 56 | if (gpio_data->desired_brightness) |
| 57 | led_set_brightness_async(gpio_data->led, | 57 | led_set_brightness_nosleep(gpio_data->led, |
| 58 | gpio_data->desired_brightness); | 58 | gpio_data->desired_brightness); |
| 59 | else | 59 | else |
| 60 | led_set_brightness_async(gpio_data->led, LED_FULL); | 60 | led_set_brightness_nosleep(gpio_data->led, LED_FULL); |
| 61 | } else { | 61 | } else { |
| 62 | led_set_brightness_async(gpio_data->led, LED_OFF); | 62 | led_set_brightness_nosleep(gpio_data->led, LED_OFF); |
| 63 | } | 63 | } |
| 64 | } | 64 | } |
| 65 | 65 | ||
diff --git a/drivers/leds/trigger/ledtrig-heartbeat.c b/drivers/leds/trigger/ledtrig-heartbeat.c index 8622ce651ae2..410c39c62dc7 100644 --- a/drivers/leds/trigger/ledtrig-heartbeat.c +++ b/drivers/leds/trigger/ledtrig-heartbeat.c | |||
| @@ -38,7 +38,7 @@ static void led_heartbeat_function(unsigned long data) | |||
| 38 | unsigned long delay = 0; | 38 | unsigned long delay = 0; |
| 39 | 39 | ||
| 40 | if (unlikely(panic_heartbeats)) { | 40 | if (unlikely(panic_heartbeats)) { |
| 41 | led_set_brightness(led_cdev, LED_OFF); | 41 | led_set_brightness_nosleep(led_cdev, LED_OFF); |
| 42 | return; | 42 | return; |
| 43 | } | 43 | } |
| 44 | 44 | ||
| @@ -81,7 +81,7 @@ static void led_heartbeat_function(unsigned long data) | |||
| 81 | break; | 81 | break; |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | led_set_brightness_async(led_cdev, brightness); | 84 | led_set_brightness_nosleep(led_cdev, brightness); |
| 85 | mod_timer(&heartbeat_data->timer, jiffies + delay); | 85 | mod_timer(&heartbeat_data->timer, jiffies + delay); |
| 86 | } | 86 | } |
| 87 | 87 | ||
diff --git a/drivers/leds/trigger/ledtrig-oneshot.c b/drivers/leds/trigger/ledtrig-oneshot.c index fbd02cdc3ad7..67293177a07b 100644 --- a/drivers/leds/trigger/ledtrig-oneshot.c +++ b/drivers/leds/trigger/ledtrig-oneshot.c | |||
| @@ -63,9 +63,9 @@ static ssize_t led_invert_store(struct device *dev, | |||
| 63 | oneshot_data->invert = !!state; | 63 | oneshot_data->invert = !!state; |
| 64 | 64 | ||
| 65 | if (oneshot_data->invert) | 65 | if (oneshot_data->invert) |
| 66 | led_set_brightness_async(led_cdev, LED_FULL); | 66 | led_set_brightness_nosleep(led_cdev, LED_FULL); |
| 67 | else | 67 | else |
| 68 | led_set_brightness_async(led_cdev, LED_OFF); | 68 | led_set_brightness_nosleep(led_cdev, LED_OFF); |
| 69 | 69 | ||
| 70 | return size; | 70 | return size; |
| 71 | } | 71 | } |
diff --git a/drivers/leds/trigger/ledtrig-transient.c b/drivers/leds/trigger/ledtrig-transient.c index 3c34de404d18..1dddd8f63e2a 100644 --- a/drivers/leds/trigger/ledtrig-transient.c +++ b/drivers/leds/trigger/ledtrig-transient.c | |||
| @@ -41,7 +41,7 @@ static void transient_timer_function(unsigned long data) | |||
| 41 | struct transient_trig_data *transient_data = led_cdev->trigger_data; | 41 | struct transient_trig_data *transient_data = led_cdev->trigger_data; |
| 42 | 42 | ||
| 43 | transient_data->activate = 0; | 43 | transient_data->activate = 0; |
| 44 | led_set_brightness_async(led_cdev, transient_data->restore_state); | 44 | led_set_brightness_nosleep(led_cdev, transient_data->restore_state); |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | static ssize_t transient_activate_show(struct device *dev, | 47 | static ssize_t transient_activate_show(struct device *dev, |
| @@ -72,7 +72,7 @@ static ssize_t transient_activate_store(struct device *dev, | |||
| 72 | if (state == 0 && transient_data->activate == 1) { | 72 | if (state == 0 && transient_data->activate == 1) { |
| 73 | del_timer(&transient_data->timer); | 73 | del_timer(&transient_data->timer); |
| 74 | transient_data->activate = state; | 74 | transient_data->activate = state; |
| 75 | led_set_brightness_async(led_cdev, | 75 | led_set_brightness_nosleep(led_cdev, |
| 76 | transient_data->restore_state); | 76 | transient_data->restore_state); |
| 77 | return size; | 77 | return size; |
| 78 | } | 78 | } |
| @@ -81,7 +81,7 @@ static ssize_t transient_activate_store(struct device *dev, | |||
| 81 | if (state == 1 && transient_data->activate == 0 && | 81 | if (state == 1 && transient_data->activate == 0 && |
| 82 | transient_data->duration != 0) { | 82 | transient_data->duration != 0) { |
| 83 | transient_data->activate = state; | 83 | transient_data->activate = state; |
| 84 | led_set_brightness_async(led_cdev, transient_data->state); | 84 | led_set_brightness_nosleep(led_cdev, transient_data->state); |
| 85 | transient_data->restore_state = | 85 | transient_data->restore_state = |
| 86 | (transient_data->state == LED_FULL) ? LED_OFF : LED_FULL; | 86 | (transient_data->state == LED_FULL) ? LED_OFF : LED_FULL; |
| 87 | mod_timer(&transient_data->timer, | 87 | mod_timer(&transient_data->timer, |
| @@ -204,7 +204,7 @@ static void transient_trig_deactivate(struct led_classdev *led_cdev) | |||
| 204 | 204 | ||
| 205 | if (led_cdev->activated) { | 205 | if (led_cdev->activated) { |
| 206 | del_timer_sync(&transient_data->timer); | 206 | del_timer_sync(&transient_data->timer); |
| 207 | led_set_brightness_async(led_cdev, | 207 | led_set_brightness_nosleep(led_cdev, |
| 208 | transient_data->restore_state); | 208 | transient_data->restore_state); |
| 209 | device_remove_file(led_cdev->dev, &dev_attr_activate); | 209 | device_remove_file(led_cdev->dev, &dev_attr_activate); |
| 210 | device_remove_file(led_cdev->dev, &dev_attr_duration); | 210 | device_remove_file(led_cdev->dev, &dev_attr_duration); |
