Merge remote-tracking branch 'asoc/topic/dapm' into asoc-next
[cascardo/linux.git] / drivers / leds / led-core.c
index aaa8eba..9886dac 100644 (file)
@@ -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);
 
@@ -143,3 +155,21 @@ int led_update_brightness(struct led_classdev *led_cdev)
        return ret;
 }
 EXPORT_SYMBOL(led_update_brightness);
+
+/* Caller must ensure led_cdev->led_access held */
+void led_sysfs_disable(struct led_classdev *led_cdev)
+{
+       lockdep_assert_held(&led_cdev->led_access);
+
+       led_cdev->flags |= LED_SYSFS_DISABLE;
+}
+EXPORT_SYMBOL_GPL(led_sysfs_disable);
+
+/* Caller must ensure led_cdev->led_access held */
+void led_sysfs_enable(struct led_classdev *led_cdev)
+{
+       lockdep_assert_held(&led_cdev->led_access);
+
+       led_cdev->flags &= ~LED_SYSFS_DISABLE;
+}
+EXPORT_SYMBOL_GPL(led_sysfs_enable);