leds-lp55xx: clean up init function
Milo(Woogyom) Kim [Tue, 5 Feb 2013 09:58:35 +0000 (18:58 +0900)]
 lp5521/5523_init_device() are replaced with lp55xx common function,
 lp55xx_init_device().

 Error handler in init_device:
 deinit function are matched with 'err_post_init' section in
 lp55xx_init_device().

 Remove LP5523 engine intialization code:
 Engine functionality is not mandatory but optional.
 Moreover engine initialization is done internally with device reset command.
 Therefore, this code is unnecessary.

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
drivers/leds/leds-lp55xx-common.c

index faab449..74dc208 100644 (file)
@@ -689,26 +689,6 @@ static void lp5521_unregister_sysfs(struct i2c_client *client)
                                &lp5521_led_attribute_group);
 }
 
-static void lp5521_deinit_device(struct lp5521_chip *chip);
-static int lp5521_init_device(struct lp5521_chip *chip)
-{
-       struct i2c_client *client = chip->client;
-       struct lp55xx_chip *temp;
-       int ret;
-
-       ret = lp5521_post_init_device(temp);
-       if (ret < 0) {
-               dev_err(&client->dev, "error configuring chip\n");
-               goto err_config;
-       }
-
-       return 0;
-
-err_config:
-       lp5521_deinit_device(chip);
-       return ret;
-}
-
 static void lp5521_deinit_device(struct lp5521_chip *chip)
 {
        struct lp5521_platform_data *pdata = chip->pdata;
@@ -860,7 +840,7 @@ static int lp5521_probe(struct i2c_client *client,
 
        i2c_set_clientdata(client, led);
 
-       ret = lp5521_init_device(old_chip);
+       ret = lp55xx_init_device(chip);
        if (ret)
                goto err_init;
 
index 110565b..80b7fb4 100644 (file)
@@ -773,18 +773,6 @@ static void lp5523_set_mode(struct lp5523_engine *engine, u8 mode)
 /*--------------------------------------------------------------*/
 /*                     Probe, Attach, Remove                   */
 /*--------------------------------------------------------------*/
-static int __init lp5523_init_engine(struct lp5523_engine *engine, int id)
-{
-       if (id < 1 || id > LP5523_ENGINES)
-               return -1;
-       engine->id = id;
-       engine->engine_mask = LP5523_ENG_MASK_BASE >> SHIFT_MASK(id);
-       engine->prog_page = id - 1;
-       engine->mux_page = id + 2;
-
-       return 0;
-}
-
 static int lp5523_init_led(struct lp5523_led *led, struct device *dev,
                           int chan, struct lp5523_platform_data *pdata,
                           const char *chip_name)
@@ -884,26 +872,6 @@ static void lp5523_unregister_leds(struct lp5523_chip *chip)
        }
 }
 
-static void lp5523_deinit_device(struct lp5523_chip *chip);
-static int lp5523_init_device(struct lp5523_chip *chip)
-{
-       struct i2c_client *client = chip->client;
-       struct lp55xx_chip *temp;
-       int ret;
-
-       ret = lp5523_post_init_device(temp);
-       if (ret < 0) {
-               dev_err(&client->dev, "error configuring chip\n");
-               goto err_config;
-       }
-
-       return 0;
-
-err_config:
-       lp5523_deinit_device(chip);
-       return ret;
-}
-
 static void lp5523_deinit_device(struct lp5523_chip *chip)
 {
        struct lp5523_platform_data *pdata = chip->pdata;
@@ -931,7 +899,7 @@ static int lp5523_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
 {
        struct lp5523_chip              *old_chip = NULL;
-       int ret, i;
+       int ret;
        struct lp55xx_chip *chip;
        struct lp55xx_led *led;
        struct lp55xx_platform_data *pdata = client->dev.platform_data;
@@ -958,21 +926,12 @@ static int lp5523_probe(struct i2c_client *client,
 
        i2c_set_clientdata(client, led);
 
-       ret = lp5523_init_device(old_chip);
+       ret = lp55xx_init_device(chip);
        if (ret)
                goto err_init;
 
        dev_info(&client->dev, "%s Programmable led chip found\n", id->name);
 
-       /* Initialize engines */
-       for (i = 0; i < ARRAY_SIZE(old_chip->engines); i++) {
-               ret = lp5523_init_engine(&old_chip->engines[i], i + 1);
-               if (ret) {
-                       dev_err(&client->dev, "error initializing engine\n");
-                       goto fail1;
-               }
-       }
-
        ret = lp5523_register_leds(old_chip, id->name);
        if (ret)
                goto fail2;
@@ -985,7 +944,6 @@ static int lp5523_probe(struct i2c_client *client,
        return ret;
 fail2:
        lp5523_unregister_leds(old_chip);
-fail1:
        lp5523_deinit_device(old_chip);
 err_init:
        return ret;
index 74beb36..c06745f 100644 (file)
@@ -144,9 +144,18 @@ int lp55xx_init_device(struct lp55xx_chip *chip)
 
        /* chip specific initialization */
        ret = lp55xx_post_init_device(chip);
+       if (ret) {
+               dev_err(dev, "post init device err: %d\n", ret);
+               goto err_post_init;
+       }
 
        return 0;
 
+err_post_init:
+       if (pdata->enable)
+               pdata->enable(0);
+       if (pdata->release_resources)
+               pdata->release_resources();
 err:
        return ret;
 }