Skip to content

Commit

Permalink
leds: leds-ns2: fix private driver data storage
Browse files Browse the repository at this point in the history
dev_set_drvdata() can't be used to set the driver private data pointer.
This would overwrite the led classdev object previously registered by
led_classdev_register().

Note that despite this mistake, the driver work fine because led_dat and
led_dat->cdev are at the same memory address.

Signed-off-by: Simon Guinot <[email protected]>
Signed-off-by: Nicolas Pitre <[email protected]>
  • Loading branch information
Simon Guinot authored and npitre committed Oct 7, 2010
1 parent b51d92d commit e5971bb
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions drivers/leds/leds-ns2.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,12 @@ static ssize_t ns2_led_sata_store(struct device *dev,
struct device_attribute *attr,
const char *buff, size_t count)
{
struct led_classdev *led_cdev = dev_get_drvdata(dev);
struct ns2_led_data *led_dat =
container_of(led_cdev, struct ns2_led_data, cdev);
int ret;
unsigned long enable;
enum ns2_led_modes mode;
struct ns2_led_data *led_dat = dev_get_drvdata(dev);

ret = strict_strtoul(buff, 10, &enable);
if (ret < 0)
Expand Down Expand Up @@ -172,7 +174,9 @@ static ssize_t ns2_led_sata_store(struct device *dev,
static ssize_t ns2_led_sata_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct ns2_led_data *led_dat = dev_get_drvdata(dev);
struct led_classdev *led_cdev = dev_get_drvdata(dev);
struct ns2_led_data *led_dat =
container_of(led_cdev, struct ns2_led_data, cdev);

return sprintf(buf, "%d\n", led_dat->sata);
}
Expand Down Expand Up @@ -234,7 +238,6 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
if (ret < 0)
goto err_free_slow;

dev_set_drvdata(led_dat->cdev.dev, led_dat);
ret = device_create_file(led_dat->cdev.dev, &dev_attr_sata);
if (ret < 0)
goto err_free_cdev;
Expand Down

0 comments on commit e5971bb

Please sign in to comment.