Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

leds: lp8860: Remove work queue



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

Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
Acked-by: default avatarDan Murphy <dmurphy@ti.com>
Signed-off-by: default avatarJacek Anaszewski <j.anaszewski@samsung.com>
parent 64998371
Loading
Loading
Loading
Loading
+7 −20
Original line number Diff line number Diff line
@@ -91,26 +91,22 @@
/**
 * struct lp8860_led -
 * @lock - Lock for reading/writing the device
 * @work - Work item used to off load the brightness register writes
 * @client - Pointer to the I2C client
 * @led_dev - led class device pointer
 * @regmap - Devices register map
 * @eeprom_regmap - EEPROM register map
 * @enable_gpio - VDDIO/EN gpio to enable communication interface
 * @regulator - LED supply regulator pointer
 * @brightness - Current brightness value requested
 * @label - LED label
**/
struct lp8860_led {
	struct mutex lock;
	struct work_struct work;
	struct i2c_client *client;
	struct led_classdev led_dev;
	struct regmap *regmap;
	struct regmap *eeprom_regmap;
	struct gpio_desc *enable_gpio;
	struct regulator *regulator;
	enum led_brightness brightness;
	const char *label;
};

@@ -212,11 +208,13 @@ static int lp8860_fault_check(struct lp8860_led *led)
	return ret;
}

static void lp8860_led_brightness_work(struct work_struct *work)
static int lp8860_brightness_set(struct led_classdev *led_cdev,
				enum led_brightness brt_val)
{
	struct lp8860_led *led = container_of(work, struct lp8860_led, work);
	struct lp8860_led *led =
			container_of(led_cdev, struct lp8860_led, led_dev);
	int disp_brightness = brt_val * 255;
	int ret;
	int disp_brightness = led->brightness * 255;

	mutex_lock(&led->lock);

@@ -241,16 +239,7 @@ static void lp8860_led_brightness_work(struct work_struct *work)
	}
out:
	mutex_unlock(&led->lock);
}

static void lp8860_brightness_set(struct led_classdev *led_cdev,
				enum led_brightness brt_val)
{
	struct lp8860_led *led =
			container_of(led_cdev, struct lp8860_led, led_dev);

	led->brightness = brt_val;
	schedule_work(&led->work);
	return ret;
}

static int lp8860_init(struct lp8860_led *led)
@@ -406,10 +395,9 @@ static int lp8860_probe(struct i2c_client *client,
	led->client = client;
	led->led_dev.name = led->label;
	led->led_dev.max_brightness = LED_FULL;
	led->led_dev.brightness_set = lp8860_brightness_set;
	led->led_dev.brightness_set_blocking = lp8860_brightness_set;

	mutex_init(&led->lock);
	INIT_WORK(&led->work, lp8860_led_brightness_work);

	i2c_set_clientdata(client, led);

@@ -448,7 +436,6 @@ static int lp8860_remove(struct i2c_client *client)
	int ret;

	led_classdev_unregister(&led->led_dev);
	cancel_work_sync(&led->work);

	if (led->enable_gpio)
		gpiod_direction_output(led->enable_gpio, 0);