leds: lp3944: 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> Acked-by: Antonio Ospite <ao2@ao2.it> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
This commit is contained in:
parent
00a88a19d1
commit
525d6a65a2
|
@ -31,7 +31,6 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/leds-lp3944.h>
|
||||
|
||||
/* Read Only Registers */
|
||||
|
@ -68,10 +67,8 @@
|
|||
struct lp3944_led_data {
|
||||
u8 id;
|
||||
enum lp3944_type type;
|
||||
enum lp3944_status status;
|
||||
struct led_classdev ldev;
|
||||
struct i2c_client *client;
|
||||
struct work_struct work;
|
||||
};
|
||||
|
||||
struct lp3944_data {
|
||||
|
@ -275,13 +272,12 @@ static int lp3944_led_set_blink(struct led_classdev *led_cdev,
|
|||
dev_dbg(&led->client->dev, "%s: OK hardware accelerated blink!\n",
|
||||
__func__);
|
||||
|
||||
led->status = LP3944_LED_STATUS_DIM0;
|
||||
schedule_work(&led->work);
|
||||
lp3944_led_set(led, LP3944_LED_STATUS_DIM0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void lp3944_led_set_brightness(struct led_classdev *led_cdev,
|
||||
static int lp3944_led_set_brightness(struct led_classdev *led_cdev,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
struct lp3944_led_data *led = ldev_to_led(led_cdev);
|
||||
|
@ -289,16 +285,7 @@ static void lp3944_led_set_brightness(struct led_classdev *led_cdev,
|
|||
dev_dbg(&led->client->dev, "%s: %s, %d\n",
|
||||
__func__, led_cdev->name, brightness);
|
||||
|
||||
led->status = !!brightness;
|
||||
schedule_work(&led->work);
|
||||
}
|
||||
|
||||
static void lp3944_led_work(struct work_struct *work)
|
||||
{
|
||||
struct lp3944_led_data *led;
|
||||
|
||||
led = container_of(work, struct lp3944_led_data, work);
|
||||
lp3944_led_set(led, led->status);
|
||||
return lp3944_led_set(led, !!brightness);
|
||||
}
|
||||
|
||||
static int lp3944_configure(struct i2c_client *client,
|
||||
|
@ -318,14 +305,13 @@ static int lp3944_configure(struct i2c_client *client,
|
|||
case LP3944_LED_TYPE_LED:
|
||||
case LP3944_LED_TYPE_LED_INVERTED:
|
||||
led->type = pled->type;
|
||||
led->status = pled->status;
|
||||
led->ldev.name = pled->name;
|
||||
led->ldev.max_brightness = 1;
|
||||
led->ldev.brightness_set = lp3944_led_set_brightness;
|
||||
led->ldev.brightness_set_blocking =
|
||||
lp3944_led_set_brightness;
|
||||
led->ldev.blink_set = lp3944_led_set_blink;
|
||||
led->ldev.flags = LED_CORE_SUSPENDRESUME;
|
||||
|
||||
INIT_WORK(&led->work, lp3944_led_work);
|
||||
err = led_classdev_register(&client->dev, &led->ldev);
|
||||
if (err < 0) {
|
||||
dev_err(&client->dev,
|
||||
|
@ -336,14 +322,14 @@ static int lp3944_configure(struct i2c_client *client,
|
|||
|
||||
/* to expose the default value to userspace */
|
||||
led->ldev.brightness =
|
||||
(enum led_brightness) led->status;
|
||||
(enum led_brightness) pled->status;
|
||||
|
||||
/* Set the default led status */
|
||||
err = lp3944_led_set(led, led->status);
|
||||
err = lp3944_led_set(led, pled->status);
|
||||
if (err < 0) {
|
||||
dev_err(&client->dev,
|
||||
"%s couldn't set STATUS %d\n",
|
||||
led->ldev.name, led->status);
|
||||
led->ldev.name, pled->status);
|
||||
goto exit;
|
||||
}
|
||||
break;
|
||||
|
@ -364,7 +350,6 @@ exit:
|
|||
case LP3944_LED_TYPE_LED:
|
||||
case LP3944_LED_TYPE_LED_INVERTED:
|
||||
led_classdev_unregister(&data->leds[i].ldev);
|
||||
cancel_work_sync(&data->leds[i].work);
|
||||
break;
|
||||
|
||||
case LP3944_LED_TYPE_NONE:
|
||||
|
@ -424,7 +409,6 @@ static int lp3944_remove(struct i2c_client *client)
|
|||
case LP3944_LED_TYPE_LED:
|
||||
case LP3944_LED_TYPE_LED_INVERTED:
|
||||
led_classdev_unregister(&data->leds[i].ldev);
|
||||
cancel_work_sync(&data->leds[i].work);
|
||||
break;
|
||||
|
||||
case LP3944_LED_TYPE_NONE:
|
||||
|
|
Loading…
Reference in New Issue