Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <andrew@lunn.ch>
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>

authored by

Andrew Lunn and committed by
Jacek Anaszewski
8ec108c0 0a1f01d3

+12 -30
+12 -30
drivers/leds/leds-dac124s085.c
··· 13 13 #include <linux/module.h> 14 14 #include <linux/mutex.h> 15 15 #include <linux/slab.h> 16 - #include <linux/spinlock.h> 17 - #include <linux/workqueue.h> 18 16 #include <linux/spi/spi.h> 19 17 20 18 struct dac124s085_led { 21 19 struct led_classdev ldev; 22 20 struct spi_device *spi; 23 21 int id; 24 - int brightness; 25 22 char name[sizeof("dac124s085-3")]; 26 23 27 24 struct mutex mutex; 28 - struct work_struct work; 29 - spinlock_t lock; 30 25 }; 31 26 32 27 struct dac124s085 { ··· 33 38 #define ALL_WRITE_UPDATE (2 << 12) 34 39 #define POWER_DOWN_OUTPUT (3 << 12) 35 40 36 - static void dac124s085_led_work(struct work_struct *work) 37 - { 38 - struct dac124s085_led *led = container_of(work, struct dac124s085_led, 39 - work); 40 - u16 word; 41 - 42 - mutex_lock(&led->mutex); 43 - word = cpu_to_le16(((led->id) << 14) | REG_WRITE_UPDATE | 44 - (led->brightness & 0xfff)); 45 - spi_write(led->spi, (const u8 *)&word, sizeof(word)); 46 - mutex_unlock(&led->mutex); 47 - } 48 - 49 - static void dac124s085_set_brightness(struct led_classdev *ldev, 41 + static int dac124s085_set_brightness(struct led_classdev *ldev, 50 42 enum led_brightness brightness) 51 43 { 52 44 struct dac124s085_led *led = container_of(ldev, struct dac124s085_led, 53 45 ldev); 46 + u16 word; 47 + int ret; 54 48 55 - spin_lock(&led->lock); 56 - led->brightness = brightness; 57 - schedule_work(&led->work); 58 - spin_unlock(&led->lock); 49 + mutex_lock(&led->mutex); 50 + word = cpu_to_le16(((led->id) << 14) | REG_WRITE_UPDATE | 51 + (brightness & 0xfff)); 52 + ret = spi_write(led->spi, (const u8 *)&word, sizeof(word)); 53 + mutex_unlock(&led->mutex); 54 + 55 + return ret; 59 56 } 60 57 61 58 static int dac124s085_probe(struct spi_device *spi) ··· 65 78 for (i = 0; i < ARRAY_SIZE(dac->leds); i++) { 66 79 led = dac->leds + i; 67 80 led->id = i; 68 - led->brightness = LED_OFF; 69 81 led->spi = spi; 70 82 snprintf(led->name, sizeof(led->name), "dac124s085-%d", i); 71 - spin_lock_init(&led->lock); 72 - INIT_WORK(&led->work, dac124s085_led_work); 73 83 mutex_init(&led->mutex); 74 84 led->ldev.name = led->name; 75 85 led->ldev.brightness = LED_OFF; 76 86 led->ldev.max_brightness = 0xfff; 77 - led->ldev.brightness_set = dac124s085_set_brightness; 87 + led->ldev.brightness_set_blocking = dac124s085_set_brightness; 78 88 ret = led_classdev_register(&spi->dev, &led->ldev); 79 89 if (ret < 0) 80 90 goto eledcr; ··· 93 109 struct dac124s085 *dac = spi_get_drvdata(spi); 94 110 int i; 95 111 96 - for (i = 0; i < ARRAY_SIZE(dac->leds); i++) { 112 + for (i = 0; i < ARRAY_SIZE(dac->leds); i++) 97 113 led_classdev_unregister(&dac->leds[i].ldev); 98 - cancel_work_sync(&dac->leds[i].work); 99 - } 100 114 101 115 return 0; 102 116 }