All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johan Hovold <johan@kernel.org>
To: Bryan Wu <cooloney@gmail.com>, Richard Purdie <rpurdie@rpsys.net>
Cc: "Dmitry Torokhov" <dmitry.torokhov@gmail.com>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-leds@vger.kernel.org,
	"Janne Kanniainen" <janne.kanniainen@gmail.com>,
	"Jiri Kosina" <jkosina@suse.cz>, "Bjørn Mork" <bjorn@mork.no>,
	"Johan Hovold" <johan@kernel.org>
Subject: [PATCH 05/13] leds: lm3642: fix attribute-creation race
Date: Wed, 25 Jun 2014 19:08:48 +0200	[thread overview]
Message-ID: <1403716136-32694-6-git-send-email-johan@kernel.org> (raw)
In-Reply-To: <1403716136-32694-1-git-send-email-johan@kernel.org>

Use the attribute groups of the led-class to create the flash and
torch-LED attributes during probe in order to avoid racing with
userspace.

Signed-off-by: Johan Hovold <johan@kernel.org>
---
 drivers/leds/leds-lm3642.c | 30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/drivers/leds/leds-lm3642.c b/drivers/leds/leds-lm3642.c
index ceb6b3cde6fe..d3dec0132769 100644
--- a/drivers/leds/leds-lm3642.c
+++ b/drivers/leds/leds-lm3642.c
@@ -313,6 +313,18 @@ static const struct regmap_config lm3642_regmap = {
 	.max_register = REG_MAX,
 };
 
+static struct attribute *lm3642_flash_attrs[] = {
+	&dev_attr_strobe_pin.attr,
+	NULL
+};
+ATTRIBUTE_GROUPS(lm3642_flash);
+
+static struct attribute *lm3642_torch_attrs[] = {
+	&dev_attr_torch_pin.attr,
+	NULL
+};
+ATTRIBUTE_GROUPS(lm3642_torch);
+
 static int lm3642_probe(struct i2c_client *client,
 				  const struct i2c_device_id *id)
 {
@@ -364,17 +376,13 @@ static int lm3642_probe(struct i2c_client *client,
 	chip->cdev_flash.max_brightness = 16;
 	chip->cdev_flash.brightness_set = lm3642_strobe_brightness_set;
 	chip->cdev_flash.default_trigger = "flash";
+	chip->cdev_flash.groups = lm3642_flash_groups,
 	err = led_classdev_register((struct device *)
 				    &client->dev, &chip->cdev_flash);
 	if (err < 0) {
 		dev_err(chip->dev, "failed to register flash\n");
 		goto err_out;
 	}
-	err = device_create_file(chip->cdev_flash.dev, &dev_attr_strobe_pin);
-	if (err < 0) {
-		dev_err(chip->dev, "failed to create strobe-pin file\n");
-		goto err_create_flash_pin_file;
-	}
 
 	/* torch */
 	INIT_WORK(&chip->work_torch, lm3642_deferred_torch_brightness_set);
@@ -382,17 +390,13 @@ static int lm3642_probe(struct i2c_client *client,
 	chip->cdev_torch.max_brightness = 8;
 	chip->cdev_torch.brightness_set = lm3642_torch_brightness_set;
 	chip->cdev_torch.default_trigger = "torch";
+	chip->cdev_torch.groups = lm3642_torch_groups,
 	err = led_classdev_register((struct device *)
 				    &client->dev, &chip->cdev_torch);
 	if (err < 0) {
 		dev_err(chip->dev, "failed to register torch\n");
 		goto err_create_torch_file;
 	}
-	err = device_create_file(chip->cdev_torch.dev, &dev_attr_torch_pin);
-	if (err < 0) {
-		dev_err(chip->dev, "failed to create torch-pin file\n");
-		goto err_create_torch_pin_file;
-	}
 
 	/* indicator */
 	INIT_WORK(&chip->work_indicator,
@@ -411,12 +415,8 @@ static int lm3642_probe(struct i2c_client *client,
 	return 0;
 
 err_create_indicator_file:
-	device_remove_file(chip->cdev_torch.dev, &dev_attr_torch_pin);
-err_create_torch_pin_file:
 	led_classdev_unregister(&chip->cdev_torch);
 err_create_torch_file:
-	device_remove_file(chip->cdev_flash.dev, &dev_attr_strobe_pin);
-err_create_flash_pin_file:
 	led_classdev_unregister(&chip->cdev_flash);
 err_out:
 	return err;
@@ -428,10 +428,8 @@ static int lm3642_remove(struct i2c_client *client)
 
 	led_classdev_unregister(&chip->cdev_indicator);
 	flush_work(&chip->work_indicator);
-	device_remove_file(chip->cdev_torch.dev, &dev_attr_torch_pin);
 	led_classdev_unregister(&chip->cdev_torch);
 	flush_work(&chip->work_torch);
-	device_remove_file(chip->cdev_flash.dev, &dev_attr_strobe_pin);
 	led_classdev_unregister(&chip->cdev_flash);
 	flush_work(&chip->work_flash);
 	regmap_write(chip->regmap, REG_ENABLE, 0);
-- 
1.8.5.5

  parent reply	other threads:[~2014-06-25 17:08 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-25 17:08 [PATCH 00/13] leds: fix attribute-creation races Johan Hovold
2014-06-25 17:08 ` [PATCH 01/13] leds: add led-class attribute-group support Johan Hovold
2014-06-25 17:08 ` [PATCH 02/13] leds: lm3550: fix attribute-creation race Johan Hovold
2014-06-25 17:08 ` [PATCH 03/13] leds: lm3533: " Johan Hovold
2014-06-25 17:08 ` [PATCH 04/13] leds: lm355x: " Johan Hovold
2014-06-25 17:08 ` Johan Hovold [this message]
2014-06-25 17:08 ` [PATCH 06/13] leds: max8997: " Johan Hovold
2014-06-25 17:08 ` [PATCH 07/13] leds: netxbig: " Johan Hovold
2014-06-25 22:30   ` Bryan Wu
2014-06-25 17:08 ` [PATCH 08/13] leds: ns2: " Johan Hovold
2014-06-25 17:08 ` [PATCH 09/13] leds: ss4200: " Johan Hovold
2014-06-25 17:08 ` [PATCH 10/13] leds: wm831x-status: " Johan Hovold
2014-06-25 17:08 ` [PATCH 11/13] input: lm8323: " Johan Hovold
2014-06-25 22:45   ` Bryan Wu
2014-06-27 18:50   ` Dmitry Torokhov
2014-06-30 23:06     ` Bryan Wu
2014-06-25 17:08 ` [PATCH 12/13] leds: lp55xx-common: fix sysfs entry leak Johan Hovold
2014-06-25 17:08 ` [PATCH 13/13] leds: lp55xx-common: fix attribute-creation race Johan Hovold
2014-06-25 22:46 ` [PATCH 00/13] leds: fix attribute-creation races Bryan Wu
2014-06-26 23:25   ` Greg Kroah-Hartman
2014-06-27 10:05     ` Jiri Kosina

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1403716136-32694-6-git-send-email-johan@kernel.org \
    --to=johan@kernel.org \
    --cc=bjorn@mork.no \
    --cc=cooloney@gmail.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=janne.kanniainen@gmail.com \
    --cc=jkosina@suse.cz \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=rpurdie@rpsys.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.