Commit d890389f authored by Andrew Lunn's avatar Andrew Lunn Committed by Jacek Anaszewski
Browse files

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: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarJacek Anaszewski <j.anaszewski@samsung.com>
parent fa1706c4
Loading
Loading
Loading
Loading
+7 −24
Original line number Diff line number Diff line
@@ -14,7 +14,6 @@
#include <linux/of_device.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <linux/workqueue.h>

#define TLC591XX_MAX_LEDS	16

@@ -42,13 +41,11 @@
#define LEDOUT_MASK		0x3

#define ldev_to_led(c)		container_of(c, struct tlc591xx_led, ldev)
#define work_to_led(work)	container_of(work, struct tlc591xx_led, work)

struct tlc591xx_led {
	bool active;
	unsigned int led_no;
	struct led_classdev ldev;
	struct work_struct work;
	struct tlc591xx_priv *priv;
};

@@ -110,12 +107,12 @@ tlc591xx_set_pwm(struct tlc591xx_priv *priv, struct tlc591xx_led *led,
	return regmap_write(priv->regmap, pwm, brightness);
}

static void
tlc591xx_led_work(struct work_struct *work)
static int
tlc591xx_brightness_set(struct led_classdev *led_cdev,
			enum led_brightness brightness)
{
	struct tlc591xx_led *led = work_to_led(work);
	struct tlc591xx_led *led = ldev_to_led(led_cdev);
	struct tlc591xx_priv *priv = led->priv;
	enum led_brightness brightness = led->ldev.brightness;
	int err;

	switch (brightness) {
@@ -131,18 +128,7 @@ tlc591xx_led_work(struct work_struct *work)
			err = tlc591xx_set_pwm(priv, led, brightness);
	}

	if (err)
		dev_err(led->ldev.dev, "Failed setting brightness\n");
}

static void
tlc591xx_brightness_set(struct led_classdev *led_cdev,
			enum led_brightness brightness)
{
	struct tlc591xx_led *led = ldev_to_led(led_cdev);

	led->ldev.brightness = brightness;
	schedule_work(&led->work);
	return err;
}

static void
@@ -151,10 +137,8 @@ tlc591xx_destroy_devices(struct tlc591xx_priv *priv, unsigned int j)
	int i = j;

	while (--i >= 0) {
		if (priv->leds[i].active) {
		if (priv->leds[i].active)
			led_classdev_unregister(&priv->leds[i].ldev);
			cancel_work_sync(&priv->leds[i].work);
		}
	}
}

@@ -175,9 +159,8 @@ tlc591xx_configure(struct device *dev,

		led->priv = priv;
		led->led_no = i;
		led->ldev.brightness_set = tlc591xx_brightness_set;
		led->ldev.brightness_set_blocking = tlc591xx_brightness_set;
		led->ldev.max_brightness = LED_FULL;
		INIT_WORK(&led->work, tlc591xx_led_work);
		err = led_classdev_register(dev, &led->ldev);
		if (err < 0) {
			dev_err(dev, "couldn't register LED %s\n",