leds: Add support for setting brightness in a synchronous way
There are use cases when setting a LED brightness has to have immediate effect (e.g. setting a torch LED brightness). This patch extends LED subsystem to support such operations. The LED subsystem internal API __led_set_brightness is changed to led_set_brightness_async and new led_set_brightness_sync API is added. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Kyungmin Park <kyungmin.park@samsung.com> Cc: Richard Purdie <rpurdie@rpsys.net> Signed-off-by: Bryan Wu <cooloney@gmail.com>
这个提交包含在:
@@ -42,13 +42,13 @@ static void led_set_software_blink(struct led_classdev *led_cdev,
|
||||
|
||||
/* never on - just set to off */
|
||||
if (!delay_on) {
|
||||
__led_set_brightness(led_cdev, LED_OFF);
|
||||
led_set_brightness_async(led_cdev, LED_OFF);
|
||||
return;
|
||||
}
|
||||
|
||||
/* never off - just set to brightness */
|
||||
if (!delay_off) {
|
||||
__led_set_brightness(led_cdev, led_cdev->blink_brightness);
|
||||
led_set_brightness_async(led_cdev, led_cdev->blink_brightness);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -117,6 +117,8 @@ EXPORT_SYMBOL_GPL(led_stop_software_blink);
|
||||
void led_set_brightness(struct led_classdev *led_cdev,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
/* delay brightness setting if need to stop soft-blink timer */
|
||||
if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) {
|
||||
led_cdev->delayed_set_value = brightness;
|
||||
@@ -124,7 +126,17 @@ void led_set_brightness(struct led_classdev *led_cdev,
|
||||
return;
|
||||
}
|
||||
|
||||
__led_set_brightness(led_cdev, brightness);
|
||||
if (led_cdev->flags & SET_BRIGHTNESS_ASYNC) {
|
||||
led_set_brightness_async(led_cdev, brightness);
|
||||
return;
|
||||
} else if (led_cdev->flags & SET_BRIGHTNESS_SYNC)
|
||||
ret = led_set_brightness_sync(led_cdev, brightness);
|
||||
else
|
||||
ret = -EINVAL;
|
||||
|
||||
if (ret < 0)
|
||||
dev_dbg(led_cdev->dev, "Setting LED brightness failed (%d)\n",
|
||||
ret);
|
||||
}
|
||||
EXPORT_SYMBOL(led_set_brightness);
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户