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

leds: tlc591xx: Remove work queue

Now the core implements the work queue, remove it from the driver,
and switch to using brightness_set_blocking op.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>

authored by

Andrew Lunn and committed by
Jacek Anaszewski
d890389f fa1706c4

+7 -24
+7 -24
drivers/leds/leds-tlc591xx.c
··· 14 14 #include <linux/of_device.h> 15 15 #include <linux/regmap.h> 16 16 #include <linux/slab.h> 17 - #include <linux/workqueue.h> 18 17 19 18 #define TLC591XX_MAX_LEDS 16 20 19 ··· 41 42 #define LEDOUT_MASK 0x3 42 43 43 44 #define ldev_to_led(c) container_of(c, struct tlc591xx_led, ldev) 44 - #define work_to_led(work) container_of(work, struct tlc591xx_led, work) 45 45 46 46 struct tlc591xx_led { 47 47 bool active; 48 48 unsigned int led_no; 49 49 struct led_classdev ldev; 50 - struct work_struct work; 51 50 struct tlc591xx_priv *priv; 52 51 }; 53 52 ··· 107 110 return regmap_write(priv->regmap, pwm, brightness); 108 111 } 109 112 110 - static void 111 - tlc591xx_led_work(struct work_struct *work) 113 + static int 114 + tlc591xx_brightness_set(struct led_classdev *led_cdev, 115 + enum led_brightness brightness) 112 116 { 113 - struct tlc591xx_led *led = work_to_led(work); 117 + struct tlc591xx_led *led = ldev_to_led(led_cdev); 114 118 struct tlc591xx_priv *priv = led->priv; 115 - enum led_brightness brightness = led->ldev.brightness; 116 119 int err; 117 120 118 121 switch (brightness) { ··· 128 131 err = tlc591xx_set_pwm(priv, led, brightness); 129 132 } 130 133 131 - if (err) 132 - dev_err(led->ldev.dev, "Failed setting brightness\n"); 133 - } 134 - 135 - static void 136 - tlc591xx_brightness_set(struct led_classdev *led_cdev, 137 - enum led_brightness brightness) 138 - { 139 - struct tlc591xx_led *led = ldev_to_led(led_cdev); 140 - 141 - led->ldev.brightness = brightness; 142 - schedule_work(&led->work); 134 + return err; 143 135 } 144 136 145 137 static void ··· 137 151 int i = j; 138 152 139 153 while (--i >= 0) { 140 - if (priv->leds[i].active) { 154 + if (priv->leds[i].active) 141 155 led_classdev_unregister(&priv->leds[i].ldev); 142 - cancel_work_sync(&priv->leds[i].work); 143 - } 144 156 } 145 157 } 146 158 ··· 159 175 160 176 led->priv = priv; 161 177 led->led_no = i; 162 - led->ldev.brightness_set = tlc591xx_brightness_set; 178 + led->ldev.brightness_set_blocking = tlc591xx_brightness_set; 163 179 led->ldev.max_brightness = LED_FULL; 164 - INIT_WORK(&led->work, tlc591xx_led_work); 165 180 err = led_classdev_register(dev, &led->ldev); 166 181 if (err < 0) { 167 182 dev_err(dev, "couldn't register LED %s\n",