aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Lunn <andrew@lunn.ch>2015-08-20 06:08:10 -0400
committerJacek Anaszewski <j.anaszewski@samsung.com>2016-01-04 03:57:33 -0500
commit00a88a19d1d9b80e11ffe1a4f11dcabb93a75e45 (patch)
tree7c6adc7d8f1c3d2329625168780de5980f2b8307
parentbb58cc8141638d4dc9518f16a6fbed580c8729b8 (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.c28
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
161static void pca9532_set_brightness(struct led_classdev *led_cdev, 161static 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
180static int pca9532_set_blink(struct led_classdev *led_cdev, 183static 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
236static 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
246static int pca9532_gpio_request_pin(struct gpio_chip *gc, unsigned offset) 243static 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,