leds-lp55xx: clean up deinit leds in lp5521/5523
authorMilo(Woogyom) Kim <milo.kim@ti.com>
Tue, 5 Feb 2013 08:56:23 +0000 (17:56 +0900)
committerBryan Wu <cooloney@gmail.com>
Wed, 6 Feb 2013 23:59:26 +0000 (15:59 -0800)
 To make LED unregistration code simple, new function, _unregister_leds()
 is added in each driver.
 This patch is a preceding step for lp55xx common driver architecture.

Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
drivers/leds/leds-lp5521.c
drivers/leds/leds-lp5523.c

index f4cd0fe..ec1ffe6 100644 (file)
@@ -837,12 +837,22 @@ static int lp5521_register_leds(struct lp5521_chip *chip)
        return 0;
 }
 
+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);
+       }
+}
+
 static int lp5521_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
 {
        struct lp5521_chip              *chip;
        struct lp5521_platform_data     *pdata;
-       int ret, i;
+       int ret;
 
        chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
        if (!chip)
@@ -885,10 +895,7 @@ static int lp5521_probe(struct i2c_client *client,
        }
        return ret;
 fail2:
-       for (i = 0; i < chip->num_leds; i++) {
-               led_classdev_unregister(&chip->leds[i].cdev);
-               cancel_work_sync(&chip->leds[i].brightness_work);
-       }
+       lp5521_unregister_leds(chip);
 fail1:
        lp5521_deinit_device(chip);
        return ret;
@@ -897,15 +904,11 @@ fail1:
 static int lp5521_remove(struct i2c_client *client)
 {
        struct lp5521_chip *chip = i2c_get_clientdata(client);
-       int i;
 
        lp5521_run_led_pattern(PATTERN_OFF, chip);
        lp5521_unregister_sysfs(client);
 
-       for (i = 0; i < chip->num_leds; i++) {
-               led_classdev_unregister(&chip->leds[i].cdev);
-               cancel_work_sync(&chip->leds[i].brightness_work);
-       }
+       lp5521_unregister_leds(chip);
 
        lp5521_deinit_device(chip);
        return 0;
index f5e8932..2fc19bb 100644 (file)
@@ -936,6 +936,16 @@ static int lp5523_register_leds(struct lp5523_chip *chip, const char *name)
        return 0;
 }
 
+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);
+       }
+}
+
 static int lp5523_init_device(struct lp5523_chip *chip)
 {
        struct lp5523_platform_data *pdata = chip->pdata;
@@ -1029,10 +1039,7 @@ static int lp5523_probe(struct i2c_client *client,
        }
        return ret;
 fail2:
-       for (i = 0; i < chip->num_leds; i++) {
-               led_classdev_unregister(&chip->leds[i].cdev);
-               flush_work(&chip->leds[i].brightness_work);
-       }
+       lp5523_unregister_leds(chip);
 fail1:
        lp5523_deinit_device(chip);
        return ret;
@@ -1041,17 +1048,13 @@ fail1:
 static int lp5523_remove(struct i2c_client *client)
 {
        struct lp5523_chip *chip = i2c_get_clientdata(client);
-       int i;
 
        /* Disable engine mode */
        lp5523_write(client, LP5523_REG_OP_MODE, LP5523_CMD_DISABLED);
 
        lp5523_unregister_sysfs(client);
 
-       for (i = 0; i < chip->num_leds; i++) {
-               led_classdev_unregister(&chip->leds[i].cdev);
-               flush_work(&chip->leds[i].brightness_work);
-       }
+       lp5523_unregister_leds(chip);
 
        lp5523_deinit_device(chip);
        return 0;