Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965012AbbHKJtg (ORCPT ); Tue, 11 Aug 2015 05:49:36 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:54738 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934168AbbHKJjf (ORCPT ); Tue, 11 Aug 2015 05:39:35 -0400 X-AuditID: cbfee61b-f79706d000001b96-65-55c9c2d693f8 From: Jacek Anaszewski To: linux-leds@vger.kernel.org Cc: linux-kernel@vger.kernel.org, cooloney@gmail.com, rpurdie@rpsys.net, stsp@users.sourceforge.net, Andrew Lunn , Jacek Anaszewski , Peter Meerwald , Ricardo Ribalda Subject: [PATCH/RFC v5 25/57] leds: pca963x: Remove work queue Date: Tue, 11 Aug 2015 11:37:38 +0200 Message-id: <1439285890-27329-26-git-send-email-j.anaszewski@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1439285890-27329-1-git-send-email-j.anaszewski@samsung.com> References: <1439285890-27329-1-git-send-email-j.anaszewski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrOLMWRmVeSWpSXmKPExsVy+t9jQd1rh06GGhx+IWJx/u4hZoujOycy WfRefc5ocXnXHDaLrW/WMVr0HZK06Oqex2Sxe9dTVovOvmksDpweK+7dZfLYOesuu8fOHZ+Z PPbM/8Hq0bdlFaNH06l2Vo/Pm+QC2KO4bFJSczLLUov07RK4MlY3KBdcV6tYe+AEUwPjC/ku Rk4OCQETidVrrzNC2GISF+6tZ+ti5OIQEpjFKPGx8yAzSEJI4CejxOv9+SA2m4ChxM8Xr5m6 GDk4RATkJHaeqQSpZxaYzCQxaekJJpAaYQE7iZvT+llAbBYBVYm9s3aA2bwCnhJrXixlA+mV EFCQmDPJBiTMCRS+/nwRI8QqD4njs5vYJjDyLmBkWMUokVqQXFCclJ5rlJdarlecmFtcmpeu l5yfu4kRHHzPpHcwHt7lfohRgINRiQdowclQIdbEsuLK3EOMEhzMSiK8hVOBQrwpiZVVqUX5 8UWlOanFhxilOViUxHn1TTaFCgmkJ5akZqemFqQWwWSZODilGhgPvby29gT3zujZ1pwVB1bU HGXmlfG25X23prMihuFRsUel7K7SyzetnnTr7d3zOGX36c/nN7NuNvDi6nGatX7d804hnpxb S7niC2zfCNqZ7m9RfLRp2znth9u5L89YbHfn7O31q5Z/kp2d+sdl8R+gq3+5s7gqn+eRZn14 au0mCa2zXwJUnikqsRRnJBpqMRcVJwIAJfAZNjoCAAA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5026 Lines: 175 From: Andrew Lunn Now the core implements the work queue, remove it from the drivers. Signed-off-by: Andrew Lunn Signed-off-by: Jacek Anaszewski Cc: Peter Meerwald Cc: Ricardo Ribalda --- drivers/leds/leds-pca963x.c | 57 +++++++------------------------------------ 1 file changed, 9 insertions(+), 48 deletions(-) diff --git a/drivers/leds/leds-pca963x.c b/drivers/leds/leds-pca963x.c index 3f63a1b..662d813 100644 --- a/drivers/leds/leds-pca963x.c +++ b/drivers/leds/leds-pca963x.c @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -96,11 +95,6 @@ static const struct i2c_device_id pca963x_id[] = { }; MODULE_DEVICE_TABLE(i2c, pca963x_id); -enum pca963x_cmd { - BRIGHTNESS_SET, - BLINK_SET, -}; - struct pca963x_led; struct pca963x { @@ -112,17 +106,16 @@ struct pca963x { struct pca963x_led { struct pca963x *chip; - struct work_struct work; enum led_brightness brightness; struct led_classdev led_cdev; int led_num; /* 0 .. 15 potentially */ - enum pca963x_cmd cmd; char name[32]; u8 gdc; u8 gfrq; }; -static void pca963x_brightness_work(struct pca963x_led *pca963x) +static void pca963x_brightness(struct pca963x_led *pca963x, + enum led_brightness brightness) { u8 ledout_addr = pca963x->chip->chipdef->ledout_base + (pca963x->led_num / 4); @@ -132,7 +125,7 @@ static void pca963x_brightness_work(struct pca963x_led *pca963x) mutex_lock(&pca963x->chip->mutex); ledout = i2c_smbus_read_byte_data(pca963x->chip->client, ledout_addr); - switch (pca963x->brightness) { + switch (brightness) { case LED_FULL: i2c_smbus_write_byte_data(pca963x->chip->client, ledout_addr, (ledout & ~mask) | (PCA963X_LED_ON << shift)); @@ -152,7 +145,7 @@ static void pca963x_brightness_work(struct pca963x_led *pca963x) mutex_unlock(&pca963x->chip->mutex); } -static void pca963x_blink_work(struct pca963x_led *pca963x) +static void pca963x_blink(struct pca963x_led *pca963x) { u8 ledout_addr = pca963x->chip->chipdef->ledout_base + (pca963x->led_num / 4); @@ -180,21 +173,6 @@ static void pca963x_blink_work(struct pca963x_led *pca963x) mutex_unlock(&pca963x->chip->mutex); } -static void pca963x_work(struct work_struct *work) -{ - struct pca963x_led *pca963x = container_of(work, - struct pca963x_led, work); - - switch (pca963x->cmd) { - case BRIGHTNESS_SET: - pca963x_brightness_work(pca963x); - break; - case BLINK_SET: - pca963x_blink_work(pca963x); - break; - } -} - static void pca963x_led_set(struct led_classdev *led_cdev, enum led_brightness value) { @@ -202,14 +180,7 @@ static void pca963x_led_set(struct led_classdev *led_cdev, pca963x = container_of(led_cdev, struct pca963x_led, led_cdev); - pca963x->cmd = BRIGHTNESS_SET; - pca963x->brightness = value; - - /* - * Must use workqueue for the actual I/O since I2C operations - * can sleep. - */ - schedule_work(&pca963x->work); + pca963x_brightness(pca963x, value); } static int pca963x_blink_set(struct led_classdev *led_cdev, @@ -254,15 +225,10 @@ static int pca963x_blink_set(struct led_classdev *led_cdev, */ gfrq = (period * 24 / 1000) - 1; - pca963x->cmd = BLINK_SET; pca963x->gdc = gdc; pca963x->gfrq = gfrq; - /* - * Must use workqueue for the actual I/O since I2C operations - * can sleep. - */ - schedule_work(&pca963x->work); + pca963x_blink(pca963x); *delay_on = time_on; *delay_off = time_off; @@ -409,12 +375,11 @@ static int pca963x_probe(struct i2c_client *client, pca963x[i].led_cdev.name = pca963x[i].name; pca963x[i].led_cdev.brightness_set = pca963x_led_set; + pca963x[i].led_cdev.flags |= LED_BRIGHTNESS_BLOCKING; if (pdata && pdata->blink_type == PCA963X_HW_BLINK) pca963x[i].led_cdev.blink_set = pca963x_blink_set; - INIT_WORK(&pca963x[i].work, pca963x_work); - err = led_classdev_register(&client->dev, &pca963x[i].led_cdev); if (err < 0) goto exit; @@ -434,10 +399,8 @@ static int pca963x_probe(struct i2c_client *client, return 0; exit: - while (i--) { + while (i--) led_classdev_unregister(&pca963x[i].led_cdev); - cancel_work_sync(&pca963x[i].work); - } return err; } @@ -447,10 +410,8 @@ static int pca963x_remove(struct i2c_client *client) struct pca963x *pca963x = i2c_get_clientdata(client); int i; - for (i = 0; i < pca963x->chipdef->n_leds; i++) { + for (i = 0; i < pca963x->chipdef->n_leds; i++) led_classdev_unregister(&pca963x->leds[i].led_cdev); - cancel_work_sync(&pca963x->leds[i].work); - } return 0; } -- 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/