diff options
author | Andrew Lunn <andrew@lunn.ch> | 2015-08-20 06:08:10 -0400 |
---|---|---|
committer | Jacek Anaszewski <j.anaszewski@samsung.com> | 2016-01-04 03:57:33 -0500 |
commit | 00a88a19d1d9b80e11ffe1a4f11dcabb93a75e45 (patch) | |
tree | 7c6adc7d8f1c3d2329625168780de5980f2b8307 | |
parent | bb58cc8141638d4dc9518f16a6fbed580c8729b8 (diff) |
leds: pca9532: Remove work queue for LEDs.
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>
-rw-r--r-- | drivers/leds/leds-pca9532.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/drivers/leds/leds-pca9532.c b/drivers/leds/leds-pca9532.c index 5a6363d161a2..17c63ec9fb9e 100644 --- a/drivers/leds/leds-pca9532.c +++ b/drivers/leds/leds-pca9532.c | |||
@@ -158,7 +158,7 @@ static void pca9532_setled(struct pca9532_led *led) | |||
158 | mutex_unlock(&data->update_lock); | 158 | mutex_unlock(&data->update_lock); |
159 | } | 159 | } |
160 | 160 | ||
161 | static void pca9532_set_brightness(struct led_classdev *led_cdev, | 161 | static int pca9532_set_brightness(struct led_classdev *led_cdev, |
162 | enum led_brightness value) | 162 | enum led_brightness value) |
163 | { | 163 | { |
164 | int err = 0; | 164 | int err = 0; |
@@ -172,9 +172,12 @@ static void pca9532_set_brightness(struct led_classdev *led_cdev, | |||
172 | led->state = PCA9532_PWM0; /* Thecus: hardcode one pwm */ | 172 | led->state = PCA9532_PWM0; /* Thecus: hardcode one pwm */ |
173 | err = pca9532_calcpwm(led->client, 0, 0, value); | 173 | err = pca9532_calcpwm(led->client, 0, 0, value); |
174 | if (err) | 174 | if (err) |
175 | return; /* XXX: led api doesn't allow error code? */ | 175 | return err; |
176 | } | 176 | } |
177 | schedule_work(&led->work); | 177 | if (led->state == PCA9532_PWM0) |
178 | pca9532_setpwm(led->client, 0); | ||
179 | pca9532_setled(led); | ||
180 | return err; | ||
178 | } | 181 | } |
179 | 182 | ||
180 | static int pca9532_set_blink(struct led_classdev *led_cdev, | 183 | static int pca9532_set_blink(struct led_classdev *led_cdev, |
@@ -198,7 +201,10 @@ static int pca9532_set_blink(struct led_classdev *led_cdev, | |||
198 | err = pca9532_calcpwm(client, 0, psc, led_cdev->brightness); | 201 | err = pca9532_calcpwm(client, 0, psc, led_cdev->brightness); |
199 | if (err) | 202 | if (err) |
200 | return err; | 203 | return err; |
201 | schedule_work(&led->work); | 204 | if (led->state == PCA9532_PWM0) |
205 | pca9532_setpwm(led->client, 0); | ||
206 | pca9532_setled(led); | ||
207 | |||
202 | return 0; | 208 | return 0; |
203 | } | 209 | } |
204 | 210 | ||
@@ -233,15 +239,6 @@ static void pca9532_input_work(struct work_struct *work) | |||
233 | mutex_unlock(&data->update_lock); | 239 | mutex_unlock(&data->update_lock); |
234 | } | 240 | } |
235 | 241 | ||
236 | static void pca9532_led_work(struct work_struct *work) | ||
237 | { | ||
238 | struct pca9532_led *led; | ||
239 | led = container_of(work, struct pca9532_led, work); | ||
240 | if (led->state == PCA9532_PWM0) | ||
241 | pca9532_setpwm(led->client, 0); | ||
242 | pca9532_setled(led); | ||
243 | } | ||
244 | |||
245 | #ifdef CONFIG_LEDS_PCA9532_GPIO | 242 | #ifdef CONFIG_LEDS_PCA9532_GPIO |
246 | static int pca9532_gpio_request_pin(struct gpio_chip *gc, unsigned offset) | 243 | static int pca9532_gpio_request_pin(struct gpio_chip *gc, unsigned offset) |
247 | { | 244 | { |
@@ -307,7 +304,6 @@ static int pca9532_destroy_devices(struct pca9532_data *data, int n_devs) | |||
307 | break; | 304 | break; |
308 | case PCA9532_TYPE_LED: | 305 | case PCA9532_TYPE_LED: |
309 | led_classdev_unregister(&data->leds[i].ldev); | 306 | led_classdev_unregister(&data->leds[i].ldev); |
310 | cancel_work_sync(&data->leds[i].work); | ||
311 | break; | 307 | break; |
312 | case PCA9532_TYPE_N2100_BEEP: | 308 | case PCA9532_TYPE_N2100_BEEP: |
313 | if (data->idev != NULL) { | 309 | if (data->idev != NULL) { |
@@ -359,9 +355,9 @@ static int pca9532_configure(struct i2c_client *client, | |||
359 | led->name = pled->name; | 355 | led->name = pled->name; |
360 | led->ldev.name = led->name; | 356 | led->ldev.name = led->name; |
361 | led->ldev.brightness = LED_OFF; | 357 | led->ldev.brightness = LED_OFF; |
362 | led->ldev.brightness_set = pca9532_set_brightness; | 358 | led->ldev.brightness_set_blocking = |
359 | pca9532_set_brightness; | ||
363 | led->ldev.blink_set = pca9532_set_blink; | 360 | led->ldev.blink_set = pca9532_set_blink; |
364 | INIT_WORK(&led->work, pca9532_led_work); | ||
365 | err = led_classdev_register(&client->dev, &led->ldev); | 361 | err = led_classdev_register(&client->dev, &led->ldev); |
366 | if (err < 0) { | 362 | if (err < 0) { |
367 | dev_err(&client->dev, | 363 | dev_err(&client->dev, |