This patch adds LED_BRIGHTNESS_BLOCKING flag to the LED core to make it capable of discerning between drivers that implement brightness_set op in the old manner, i.e. the ones which use work queue internally, and drivers that implement brightness_set op in the new manner, i.e. they are aware that brightness_set op will be called from a work queue task by the LED core. In the new approach all drivers that implement brightness_set op should also set LED_BRIGHTNESS_BLOCKING flag. Signed-off-by: Jacek Anaszewski <j.anaszewski@xxxxxxxxxxx> Cc: Bryan Wu <cooloney@xxxxxxxxx> Cc: Andrew Lunn <andrew@xxxxxxx> Cc: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> Cc: Pavel Machek <pavel@xxxxxx> Cc: Stas Sergeev <stsp@xxxxxxxxxxxxxxxxxxxxx> --- drivers/leds/led-class.c | 3 +++ include/linux/leds.h | 1 + 2 files changed, 4 insertions(+) diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index ca51d58..2875e6a 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c @@ -279,6 +279,9 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev) if (!led_cdev->max_brightness) led_cdev->max_brightness = LED_FULL; + WARN_ON((led_cdev->flags & LED_BRIGHTNESS_BLOCKING) && + !led_cdev->brightness_set); + led_cdev->flags |= SET_BRIGHTNESS_ASYNC; led_update_brightness(led_cdev); diff --git a/include/linux/leds.h b/include/linux/leds.h index c32f1b8..ac9efe1 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h @@ -48,6 +48,7 @@ struct led_classdev { #define SET_BRIGHTNESS_ASYNC (1 << 21) #define SET_BRIGHTNESS_SYNC (1 << 22) #define LED_DEV_CAP_FLASH (1 << 23) +#define LED_BRIGHTNESS_BLOCKING (1 << 24) /* Set LED brightness level */ /* Must not sleep, use a workqueue if needed */ -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-leds" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html