Skip to content

Commit

Permalink
leds-lp55xx: use lp55xx_unregister_leds()
Browse files Browse the repository at this point in the history
 To unregister led class devices and sysfs attributes,
 LP5521 and LP5523 have each driver function.
 This patch makes both drivers simple using common driver function,
 lp55xx_unregister_leds().

 And some unused variables are removed.

Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
  • Loading branch information
Milo(Woogyom) Kim authored and Bryan Wu committed Feb 6, 2013
1 parent a96bfa1 commit c3a68eb
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 45 deletions.
24 changes: 2 additions & 22 deletions drivers/leds/leds-lp5521.c
Original file line number Diff line number Diff line change
Expand Up @@ -567,9 +567,6 @@ static ssize_t store_led_pattern(struct device *dev,
return len;
}

static struct attribute_group lp5521_led_attribute_group = {
};

/* device attributes */
static DEVICE_ATTR(engine1_mode, S_IRUGO | S_IWUSR,
show_engine1_mode, store_engine1_mode);
Expand Down Expand Up @@ -607,25 +604,9 @@ static int lp5521_register_sysfs(struct i2c_client *client)

static void lp5521_unregister_sysfs(struct i2c_client *client)
{
struct lp5521_chip *chip = i2c_get_clientdata(client);
struct device *dev = &client->dev;
int i;

sysfs_remove_group(&dev->kobj, &lp5521_group);

for (i = 0; i < chip->num_leds; i++)
sysfs_remove_group(&chip->leds[i].cdev.dev->kobj,
&lp5521_led_attribute_group);
}

static void lp5521_unregister_leds(struct lp5521_chip *chip)
{
int i;

for (i = 0; i < chip->num_leds; i++) {
led_classdev_unregister(&chip->leds[i].cdev);
cancel_work_sync(&chip->leds[i].brightness_work);
}
}

/* Chip specific configurations */
Expand All @@ -647,7 +628,6 @@ static struct lp55xx_device_config lp5521_cfg = {
static int lp5521_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct lp5521_chip *old_chip = NULL;
int ret;
struct lp55xx_chip *chip;
struct lp55xx_led *led;
Expand Down Expand Up @@ -692,7 +672,7 @@ static int lp5521_probe(struct i2c_client *client,
}
return ret;
fail2:
lp5521_unregister_leds(old_chip);
lp55xx_unregister_leds(led, chip);
err_register_leds:
lp55xx_deinit_device(chip);
err_init:
Expand All @@ -708,7 +688,7 @@ static int lp5521_remove(struct i2c_client *client)
lp5521_run_led_pattern(PATTERN_OFF, old_chip);
lp5521_unregister_sysfs(client);

lp5521_unregister_leds(old_chip);
lp55xx_unregister_leds(led, chip);
lp55xx_deinit_device(chip);

return 0;
Expand Down
25 changes: 2 additions & 23 deletions drivers/leds/leds-lp5523.c
Original file line number Diff line number Diff line change
Expand Up @@ -609,9 +609,6 @@ store_mode(1)
store_mode(2)
store_mode(3)

static struct attribute_group lp5523_led_attribute_group = {
};

/* device attributes */
static DEVICE_ATTR(engine1_mode, S_IRUGO | S_IWUSR,
show_engine1_mode, store_engine1_mode);
Expand Down Expand Up @@ -662,15 +659,9 @@ static int lp5523_register_sysfs(struct i2c_client *client)

static void lp5523_unregister_sysfs(struct i2c_client *client)
{
struct lp5523_chip *chip = i2c_get_clientdata(client);
struct device *dev = &client->dev;
int i;

sysfs_remove_group(&dev->kobj, &lp5523_group);

for (i = 0; i < chip->num_leds; i++)
sysfs_remove_group(&chip->leds[i].cdev.dev->kobj,
&lp5523_led_attribute_group);
}

/*--------------------------------------------------------------*/
Expand Down Expand Up @@ -703,16 +694,6 @@ static void lp5523_set_mode(struct lp5523_engine *engine, u8 mode)
/*--------------------------------------------------------------*/
/* Probe, Attach, Remove */
/*--------------------------------------------------------------*/
static void lp5523_unregister_leds(struct lp5523_chip *chip)
{
int i;

for (i = 0; i < chip->num_leds; i++) {
led_classdev_unregister(&chip->leds[i].cdev);
flush_work(&chip->leds[i].brightness_work);
}
}

/* Chip specific configurations */
static struct lp55xx_device_config lp5523_cfg = {
.reset = {
Expand All @@ -732,7 +713,6 @@ static struct lp55xx_device_config lp5523_cfg = {
static int lp5523_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct lp5523_chip *old_chip = NULL;
int ret;
struct lp55xx_chip *chip;
struct lp55xx_led *led;
Expand Down Expand Up @@ -777,7 +757,7 @@ static int lp5523_probe(struct i2c_client *client,
}
return ret;
fail2:
lp5523_unregister_leds(old_chip);
lp55xx_unregister_leds(led, chip);
err_register_leds:
lp55xx_deinit_device(chip);
err_init:
Expand All @@ -786,7 +766,6 @@ static int lp5523_probe(struct i2c_client *client,

static int lp5523_remove(struct i2c_client *client)
{
struct lp5523_chip *old_chip = i2c_get_clientdata(client);
struct lp55xx_led *led = i2c_get_clientdata(client);
struct lp55xx_chip *chip = led->chip;

Expand All @@ -795,7 +774,7 @@ static int lp5523_remove(struct i2c_client *client)

lp5523_unregister_sysfs(client);

lp5523_unregister_leds(old_chip);
lp55xx_unregister_leds(led, chip);
lp55xx_deinit_device(chip);

return 0;
Expand Down
16 changes: 16 additions & 0 deletions drivers/leds/leds-lp55xx-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,22 @@ int lp55xx_register_leds(struct lp55xx_led *led, struct lp55xx_chip *chip)
}
EXPORT_SYMBOL_GPL(lp55xx_register_leds);

void lp55xx_unregister_leds(struct lp55xx_led *led, struct lp55xx_chip *chip)
{
int i;
struct lp55xx_led *each;
struct kobject *kobj;

for (i = 0; i < chip->num_leds; i++) {
each = led + i;
kobj = &led->cdev.dev->kobj;
sysfs_remove_group(kobj, &lp55xx_led_attr_group);
led_classdev_unregister(&each->cdev);
flush_work(&each->brightness_work);
}
}
EXPORT_SYMBOL_GPL(lp55xx_unregister_leds);

MODULE_AUTHOR("Milo Kim <milo.kim@ti.com>");
MODULE_DESCRIPTION("LP55xx Common Driver");
MODULE_LICENSE("GPL");
2 changes: 2 additions & 0 deletions drivers/leds/leds-lp55xx-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,6 @@ extern void lp55xx_deinit_device(struct lp55xx_chip *chip);
/* common LED class device functions */
extern int lp55xx_register_leds(struct lp55xx_led *led,
struct lp55xx_chip *chip);
extern void lp55xx_unregister_leds(struct lp55xx_led *led,
struct lp55xx_chip *chip);
#endif /* _LEDS_LP55XX_COMMON_H */

0 comments on commit c3a68eb

Please sign in to comment.