From 8ec108c03e3820d0fe0956204feea588ce2d3dbc Mon Sep 17 00:00:00 2001 From: Andrew Lunn Date: Thu, 20 Aug 2015 12:47:25 +0200 Subject: [PATCH] leds: dac124d085: Remove work queue Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn Cc: Guennadi Liakhovetski Signed-off-by: Jacek Anaszewski --- drivers/leds/leds-dac124s085.c | 42 ++++++++++------------------------ 1 file changed, 12 insertions(+), 30 deletions(-) diff --git a/drivers/leds/leds-dac124s085.c b/drivers/leds/leds-dac124s085.c index 314159610d24..5a5a86d5f1f5 100644 --- a/drivers/leds/leds-dac124s085.c +++ b/drivers/leds/leds-dac124s085.c @@ -13,20 +13,15 @@ #include #include #include -#include -#include #include struct dac124s085_led { struct led_classdev ldev; struct spi_device *spi; int id; - int brightness; char name[sizeof("dac124s085-3")]; struct mutex mutex; - struct work_struct work; - spinlock_t lock; }; struct dac124s085 { @@ -38,29 +33,21 @@ struct dac124s085 { #define ALL_WRITE_UPDATE (2 << 12) #define POWER_DOWN_OUTPUT (3 << 12) -static void dac124s085_led_work(struct work_struct *work) -{ - struct dac124s085_led *led = container_of(work, struct dac124s085_led, - work); - u16 word; - - mutex_lock(&led->mutex); - word = cpu_to_le16(((led->id) << 14) | REG_WRITE_UPDATE | - (led->brightness & 0xfff)); - spi_write(led->spi, (const u8 *)&word, sizeof(word)); - mutex_unlock(&led->mutex); -} - -static void dac124s085_set_brightness(struct led_classdev *ldev, +static int dac124s085_set_brightness(struct led_classdev *ldev, enum led_brightness brightness) { struct dac124s085_led *led = container_of(ldev, struct dac124s085_led, ldev); + u16 word; + int ret; - spin_lock(&led->lock); - led->brightness = brightness; - schedule_work(&led->work); - spin_unlock(&led->lock); + mutex_lock(&led->mutex); + word = cpu_to_le16(((led->id) << 14) | REG_WRITE_UPDATE | + (brightness & 0xfff)); + ret = spi_write(led->spi, (const u8 *)&word, sizeof(word)); + mutex_unlock(&led->mutex); + + return ret; } static int dac124s085_probe(struct spi_device *spi) @@ -78,16 +65,13 @@ static int dac124s085_probe(struct spi_device *spi) for (i = 0; i < ARRAY_SIZE(dac->leds); i++) { led = dac->leds + i; led->id = i; - led->brightness = LED_OFF; led->spi = spi; snprintf(led->name, sizeof(led->name), "dac124s085-%d", i); - spin_lock_init(&led->lock); - INIT_WORK(&led->work, dac124s085_led_work); mutex_init(&led->mutex); led->ldev.name = led->name; led->ldev.brightness = LED_OFF; led->ldev.max_brightness = 0xfff; - led->ldev.brightness_set = dac124s085_set_brightness; + led->ldev.brightness_set_blocking = dac124s085_set_brightness; ret = led_classdev_register(&spi->dev, &led->ldev); if (ret < 0) goto eledcr; @@ -109,10 +93,8 @@ static int dac124s085_remove(struct spi_device *spi) struct dac124s085 *dac = spi_get_drvdata(spi); int i; - for (i = 0; i < ARRAY_SIZE(dac->leds); i++) { + for (i = 0; i < ARRAY_SIZE(dac->leds); i++) led_classdev_unregister(&dac->leds[i].ldev); - cancel_work_sync(&dac->leds[i].work); - } return 0; }