Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1946279AbbGQJIw (ORCPT ); Fri, 17 Jul 2015 05:08:52 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:34607 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932405AbbGQIsp (ORCPT ); Fri, 17 Jul 2015 04:48:45 -0400 X-AuditID: cbfee61a-f79516d000006302-d7-55a8c16ce6b5 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 , Nate Case Subject: [PATCH/RFC 19/51] leds: pca955x: Remove work queue Date: Fri, 17 Jul 2015 10:47:05 +0200 Message-id: <1437122857-6765-20-git-send-email-j.anaszewski@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1437122857-6765-1-git-send-email-j.anaszewski@samsung.com> References: <1437122857-6765-1-git-send-email-j.anaszewski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprGLMWRmVeSWpSXmKPExsVy+t9jAd2cgytCDVZ907c4f/cQs8XRnROZ LC7vmsNmsfXNOkaLp/0H2S1273rKatHZN43Fgd1j56y7QGLHZyaPPfN/sHo0nWpn9fi8Sc5j Vfts1gC2KC6blNSczLLUIn27BK6MhmlrWAr2y1Wcb/vI1MD4SqKLkYNDQsBE4tmq+i5GTiBT TOLCvfVsXYxcHEICixgldjz7wwTh/GSU2DqpjxWkik3AUOLni9dMIM0iAnISO89UgtQwCyxh lPg+/SMzSI2wgLVE8/VbzCA1LAKqEhee8oCEeQU8JCa+/8sIsVdBYs4kG5AwJ1D4/YOVLCC2 kIC7RNufi2wTGHkXMDKsYhRNLUguKE5KzzXUK07MLS7NS9dLzs/dxAgOrWdSOxhXNlgcYhTg YFTi4W1wXREqxJpYVlyZe4hRgoNZSYS3cidQiDclsbIqtSg/vqg0J7X4EKM0B4uSOO/JfJ9Q IYH0xJLU7NTUgtQimCwTB6dUA+NmfgP3N696o28un5p3zsxUzcrslcXfR8n//yo2l2+fNlvg Q1zy51I9/u/ee6f8EZxaafLQTXOpzYHj/561HTbeeUyisqE+edMasaAjep1bZddsfVJ+Kir/ 21rd1MXKarkacz4y6HYwv59X9UFWielhv0wJx2q/429Vlwts3WIwVa1etX0x9x8lluKMREMt 5qLiRAB3U5FBKQIAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4022 Lines: 131 From: Andrew Lunn Now the core implements the work queue, remove it from the drivers. Signed-off-by: Andrew Lunn Cc: Nate Case --- drivers/leds/leds-pca955x.c | 37 +++++++------------------------------ 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/drivers/leds/leds-pca955x.c b/drivers/leds/leds-pca955x.c index c3a08b6..3150d59 100644 --- a/drivers/leds/leds-pca955x.c +++ b/drivers/leds/leds-pca955x.c @@ -47,7 +47,6 @@ #include #include #include -#include #include /* LED select registers determine the source that drives LED outputs */ @@ -110,8 +109,6 @@ struct pca955x { struct pca955x_led { struct pca955x *pca955x; - struct work_struct work; - enum led_brightness brightness; struct led_classdev led_cdev; int led_num; /* 0 .. 15 potentially */ char name[32]; @@ -193,7 +190,8 @@ static u8 pca955x_read_ls(struct i2c_client *client, int n) pca95xx_num_input_regs(pca955x->chipdef->bits) + 4 + n); } -static void pca955x_led_work(struct work_struct *work) +static void pca955x_led_set(struct led_classdev *led_cdev, + enum led_brightness value) { struct pca955x_led *pca955x_led; struct pca955x *pca955x; @@ -201,7 +199,7 @@ static void pca955x_led_work(struct work_struct *work) int chip_ls; /* which LSx to use (0-3 potentially) */ int ls_led; /* which set of bits within LSx to use (0-3) */ - pca955x_led = container_of(work, struct pca955x_led, work); + pca955x_led = container_of(led_cdev, struct pca955x_led, led_cdev); pca955x = pca955x_led->pca955x; chip_ls = pca955x_led->led_num / 4; @@ -211,7 +209,7 @@ static void pca955x_led_work(struct work_struct *work) ls = pca955x_read_ls(pca955x->client, chip_ls); - switch (pca955x_led->brightness) { + switch (value) { case LED_FULL: ls = pca955x_ledsel(ls, ls_led, PCA955X_LS_LED_ON); break; @@ -230,7 +228,7 @@ static void pca955x_led_work(struct work_struct *work) * just turning off for all other values. */ pca955x_write_pwm(pca955x->client, 1, - 255 - pca955x_led->brightness); + 255 - value); ls = pca955x_ledsel(ls, ls_led, PCA955X_LS_BLINK1); break; } @@ -240,21 +238,6 @@ static void pca955x_led_work(struct work_struct *work) mutex_unlock(&pca955x->lock); } -static void pca955x_led_set(struct led_classdev *led_cdev, enum led_brightness value) -{ - struct pca955x_led *pca955x; - - pca955x = container_of(led_cdev, struct pca955x_led, led_cdev); - - pca955x->brightness = value; - - /* - * Must use workqueue for the actual I/O since I2C operations - * can sleep. - */ - schedule_work(&pca955x->work); -} - static int pca955x_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -330,8 +313,6 @@ static int pca955x_probe(struct i2c_client *client, pca955x_led->led_cdev.name = pca955x_led->name; pca955x_led->led_cdev.brightness_set = pca955x_led_set; - INIT_WORK(&pca955x_led->work, pca955x_led_work); - err = led_classdev_register(&client->dev, &pca955x_led->led_cdev); if (err < 0) @@ -355,10 +336,8 @@ static int pca955x_probe(struct i2c_client *client, return 0; exit: - while (i--) { + while (i--) led_classdev_unregister(&pca955x->leds[i].led_cdev); - cancel_work_sync(&pca955x->leds[i].work); - } return err; } @@ -368,10 +347,8 @@ static int pca955x_remove(struct i2c_client *client) struct pca955x *pca955x = i2c_get_clientdata(client); int i; - for (i = 0; i < pca955x->chipdef->bits; i++) { + for (i = 0; i < pca955x->chipdef->bits; i++) led_classdev_unregister(&pca955x->leds[i].led_cdev); - cancel_work_sync(&pca955x->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/