Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1186632

[PATCH/RFC 11/51] leds: blinkm: Remove work queue

From Jacek Anaszewski <j.anaszewski@samsung.com>
Newsgroups linux.kernel
Subject [PATCH/RFC 11/51] leds: blinkm: Remove work queue
Date 2015-07-17 11:20 +0200
Message-ID <pN9Ye-18j-29@gated-at.bofh.it> (permalink)
References <pN9vb-kw-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Andrew Lunn <andrew@lunn.ch>

Now the core implements the work queue, remove it from the driver.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Cc: Jan-Simon Moeller <dl9pf@gmx.de>
---
 drivers/leds/leds-blinkm.c |   66 ++++----------------------------------------
 1 file changed, 5 insertions(+), 61 deletions(-)

diff --git a/drivers/leds/leds-blinkm.c b/drivers/leds/leds-blinkm.c
index d0452b0..8543775 100644
--- a/drivers/leds/leds-blinkm.c
+++ b/drivers/leds/leds-blinkm.c
@@ -39,16 +39,9 @@ struct blinkm_led {
 	struct i2c_client *i2c_client;
 	struct led_classdev led_cdev;
 	int id;
-	atomic_t active;
-};
-
-struct blinkm_work {
-	struct blinkm_led *blinkm_led;
-	struct work_struct work;
 };
 
 #define cdev_to_blmled(c)          container_of(c, struct blinkm_led, led_cdev)
-#define work_to_blmwork(c)         container_of(c, struct blinkm_work, work)
 
 struct blinkm_data {
 	struct i2c_client *i2c_client;
@@ -439,65 +432,30 @@ static int blinkm_transfer_hw(struct i2c_client *client, int cmd)
 	return 0;
 }
 
-static void led_work(struct work_struct *work)
-{
-	int ret;
-	struct blinkm_led *led;
-	struct blinkm_data *data;
-	struct blinkm_work *blm_work = work_to_blmwork(work);
-
-	led = blm_work->blinkm_led;
-	data = i2c_get_clientdata(led->i2c_client);
-	ret = blinkm_transfer_hw(led->i2c_client, BLM_GO_RGB);
-	atomic_dec(&led->active);
-	dev_dbg(&led->i2c_client->dev,
-			"# DONE # next_red = %d, next_green = %d,"
-			" next_blue = %d, active = %d\n",
-			data->next_red, data->next_green,
-			data->next_blue, atomic_read(&led->active));
-	kfree(blm_work);
-}
-
 static int blinkm_led_common_set(struct led_classdev *led_cdev,
 				 enum led_brightness value, int color)
 {
 	/* led_brightness is 0, 127 or 255 - we just use it here as-is */
 	struct blinkm_led *led = cdev_to_blmled(led_cdev);
 	struct blinkm_data *data = i2c_get_clientdata(led->i2c_client);
-	struct blinkm_work *bl_work;
 
 	switch (color) {
 	case RED:
 		/* bail out if there's no change */
 		if (data->next_red == (u8) value)
 			return 0;
-		/* we assume a quite fast sequence here ([off]->on->off)
-		 * think of network led trigger - we cannot blink that fast, so
-		 * in case we already have a off->on->off transition queued up,
-		 * we refuse to queue up more.
-		 * Revisit: fast-changing brightness. */
-		if (atomic_read(&led->active) > 1)
-			return 0;
 		data->next_red = (u8) value;
 		break;
 	case GREEN:
 		/* bail out if there's no change */
 		if (data->next_green == (u8) value)
 			return 0;
-		/* we assume a quite fast sequence here ([off]->on->off)
-		 * Revisit: fast-changing brightness. */
-		if (atomic_read(&led->active) > 1)
-			return 0;
 		data->next_green = (u8) value;
 		break;
 	case BLUE:
 		/* bail out if there's no change */
 		if (data->next_blue == (u8) value)
 			return 0;
-		/* we assume a quite fast sequence here ([off]->on->off)
-		 * Revisit: fast-changing brightness. */
-		if (atomic_read(&led->active) > 1)
-			return 0;
 		data->next_blue = (u8) value;
 		break;
 
@@ -506,23 +464,12 @@ static int blinkm_led_common_set(struct led_classdev *led_cdev,
 		return -EINVAL;
 	}
 
-	bl_work = kzalloc(sizeof(*bl_work), GFP_ATOMIC);
-	if (!bl_work)
-		return -ENOMEM;
-
-	atomic_inc(&led->active);
+	blinkm_transfer_hw(led->i2c_client, BLM_GO_RGB);
 	dev_dbg(&led->i2c_client->dev,
-			"#TO_SCHED# next_red = %d, next_green = %d,"
-			" next_blue = %d, active = %d\n",
+			"# DONE # next_red = %d, next_green = %d,"
+			" next_blue = %d\n",
 			data->next_red, data->next_green,
-			data->next_blue, atomic_read(&led->active));
-
-	/* a fresh work _item_ for each change */
-	bl_work->blinkm_led = led;
-	INIT_WORK(&bl_work->work, led_work);
-	/* queue work in own queue for easy sync on exit*/
-	schedule_work(&bl_work->work);
-
+			data->next_blue);
 	return 0;
 }
 
@@ -669,7 +616,6 @@ static int blinkm_probe(struct i2c_client *client,
 		led[i]->id = i;
 		led[i]->led_cdev.max_brightness = 255;
 		led[i]->led_cdev.flags = LED_CORE_SUSPENDRESUME;
-		atomic_set(&led[i]->active, 0);
 		switch (i) {
 		case RED:
 			snprintf(blinkm_led_name, sizeof(blinkm_led_name),
@@ -746,10 +692,8 @@ static int blinkm_remove(struct i2c_client *client)
 	int i;
 
 	/* make sure no workqueue entries are pending */
-	for (i = 0; i < 3; i++) {
-		flush_scheduled_work();
+	for (i = 0; i < 3; i++)
 		led_classdev_unregister(&data->blinkm_leds[i].led_cdev);
-	}
 
 	/* reset rgb */
 	data->next_red = 0x00;
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH/RFC v4 00/51] Remove work queues from LED class drivers Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 10:50 +0200
  [PATCH/RFC 32/51] leds: gpio: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 10:50 +0200
  [PATCH/RFC 10/51] leds: bd2802: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 10:50 +0200
  [PATCH/RFC 27/51] leds: mc13783: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 10:50 +0200
  [PATCH/RFC 39/51] leds: ss4200: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 10:50 +0200
  [PATCH/RFC 04/51] leds: Improve setting brightness in a non sleeping  way Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 10:50 +0200
  [PATCH/RFC 44/51] leds: cobalt-qube: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 47/51] leds: locomo: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 42/51] leds: net48xx: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 45/51] leds: fsg: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 48/51] leds: dell: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 37/51] leds: ot200: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 33/51] leds: cobalt-raq: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 49/51] leds: rb532: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 50/51] leds: sunfire: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 38/51] leds: s3c24xx: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 35/51] leds: bcm6358: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 46/51] leds: hp6xx: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 34/51] leds: bcm6328: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 41/51] leds: wrap: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 43/51] leds: asic3: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
  [PATCH/RFC 40/51] leds: versatile: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
    Re: [PATCH/RFC 40/51] leds: versatile: Mark the LED fast Linus Walleij <linus.walleij@linaro.org> - 2015-07-17 15:50 +0200
  [PATCH/RFC 51/51] leds: ipaq-micro: Mark the LED fast Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:00 +0200
    Re: [PATCH/RFC 51/51] leds: ipaq-micro: Mark the LED fast Linus Walleij <linus.walleij@linaro.org> - 2015-07-17 15:50 +0200
  [PATCH/RFC 23/51] leds: da9052: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 20/51] leds: pca963x: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 25/51] leds: lt3593: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 26/51] leds: max8997: Remove unneeded workqueue include Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 18/51] leds: lp8860: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
    Re: [PATCH/RFC 18/51] leds: lp8860: Remove work queue Dan Murphy <dmurphy@ti.com> - 2015-07-17 16:00 +0200
  [PATCH/RFC 19/51] leds: pca955x: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 28/51] leds: regulator: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 15/51] leds: lp3944: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 21/51] leds: wm831x: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
    Re: [PATCH/RFC 21/51] leds: wm831x: Remove work queue Mark Brown <broonie@kernel.org> - 2015-07-17 12:10 +0200
  [PATCH/RFC 16/51] leds: lp55xx: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 13/51] leds: lm3642: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 17/51] leds: lp8788: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 31/51] leds: lm355x: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
  [PATCH/RFC 29/51] leds: wm8350: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:10 +0200
    Re: [PATCH/RFC 29/51] leds: wm8350: Remove work queue Mark Brown <broonie@kernel.org> - 2015-07-17 12:10 +0200
  [PATCH/RFC 06/51] media: flash: use led_set_brightness_sync for torch  brightness Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:20 +0200
  [PATCH/RFC 03/51] leds: Add an internal led_set_brightness_nosleep  function Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:20 +0200
  [PATCH/RFC 07/51] leds: tlc591xx: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:20 +0200
  [PATCH/RFC 12/51] leds: lm3533: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:20 +0200
    Re: [PATCH/RFC 12/51] leds: lm3533: Remove work queue Johan Hovold <johan@kernel.org> - 2015-07-17 11:30 +0200
  [PATCH/RFC 01/51] leds: Add led_set_brightness_sync to the public LED  subsystem API Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:20 +0200
    Re: [PATCH/RFC 01/51] leds: Add led_set_brightness_sync to the  public LED subsystem API Pavel Machek <pavel@ucw.cz> - 2015-07-22 09:30 +0200
  [PATCH/RFC 11/51] leds: blinkm: Remove work queue Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:20 +0200
  [PATCH/RFC 05/51] leds: Drivers shouldn't enforce SYNC/ASYNC  brightness setting Jacek Anaszewski <j.anaszewski@samsung.com> - 2015-07-17 11:20 +0200

csiph-web