From 749082d2316324ecc642dc5f46d15e8d8cfc544b Mon Sep 17 00:00:00 2001 From: "Milo(Woogyom) Kim" Date: Tue, 5 Feb 2013 17:58:01 +0900 Subject: [PATCH] --- yaml --- r: 358593 b: refs/heads/master c: f6c64c6fc8d793b414446f1a655a37b7bfce68e3 h: refs/heads/master i: 358591: 4d67324b218c4ceb8301d1d90cc3bfcd96bff40e v: v3 --- [refs] | 2 +- trunk/drivers/leds/leds-lp5521.c | 26 +++++++++++++++++--------- trunk/drivers/leds/leds-lp5523.c | 26 +++++++++++++++++++------- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index ee047aab3dda..230634247148 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 86eb7748cef00faa3eaefc8fc450ed30281a09e7 +refs/heads/master: f6c64c6fc8d793b414446f1a655a37b7bfce68e3 diff --git a/trunk/drivers/leds/leds-lp5521.c b/trunk/drivers/leds/leds-lp5521.c index ec89ed641005..e042a094a07f 100644 --- a/trunk/drivers/leds/leds-lp5521.c +++ b/trunk/drivers/leds/leds-lp5521.c @@ -694,6 +694,7 @@ static void lp5521_reset_device(struct lp5521_chip *chip) lp5521_write(client, LP5521_REG_RESET, 0xff); } +static void lp5521_deinit_device(struct lp5521_chip *chip); static int lp5521_init_device(struct lp5521_chip *chip) { struct lp5521_platform_data *pdata = chip->pdata; @@ -742,9 +743,22 @@ static int lp5521_init_device(struct lp5521_chip *chip) usleep_range(10000, 20000); ret = lp5521_detect(client); - if (ret) + if (ret) { dev_err(&client->dev, "Chip not found\n"); + goto err; + } + + ret = lp5521_configure(client); + if (ret < 0) { + dev_err(&client->dev, "error configuring chip\n"); + goto err_config; + } + return 0; + +err_config: + lp5521_deinit_device(chip); +err: return ret; } @@ -882,16 +896,10 @@ static int lp5521_probe(struct i2c_client *client, ret = lp5521_init_device(chip); if (ret) - goto fail1; + goto err_init; dev_info(&client->dev, "%s programmable led chip found\n", id->name); - ret = lp5521_configure(client); - if (ret < 0) { - dev_err(&client->dev, "error configuring chip\n"); - goto fail1; - } - ret = lp5521_register_leds(chip); if (ret) goto fail2; @@ -904,8 +912,8 @@ static int lp5521_probe(struct i2c_client *client, return ret; fail2: lp5521_unregister_leds(chip); -fail1: lp5521_deinit_device(chip); +err_init: return ret; } diff --git a/trunk/drivers/leds/leds-lp5523.c b/trunk/drivers/leds/leds-lp5523.c index cac492b0abf3..fefe27c3f377 100644 --- a/trunk/drivers/leds/leds-lp5523.c +++ b/trunk/drivers/leds/leds-lp5523.c @@ -953,6 +953,7 @@ static void lp5523_reset_device(struct lp5523_chip *chip) lp5523_write(client, LP5523_REG_RESET, 0xff); } +static void lp5523_deinit_device(struct lp5523_chip *chip); static int lp5523_init_device(struct lp5523_chip *chip) { struct lp5523_platform_data *pdata = chip->pdata; @@ -978,7 +979,22 @@ static int lp5523_init_device(struct lp5523_chip *chip) * Exact value is not available. 10 - 20ms * appears to be enough for reset. */ - return lp5523_detect(client); + ret = lp5523_detect(client); + if (ret) + goto err; + + ret = lp5523_configure(client); + if (ret < 0) { + dev_err(&client->dev, "error configuring chip\n"); + goto err_config; + } + + return 0; + +err_config: + lp5523_deinit_device(chip); +err: + return ret; } static void lp5523_deinit_device(struct lp5523_chip *chip) @@ -1018,7 +1034,7 @@ static int lp5523_probe(struct i2c_client *client, ret = lp5523_init_device(chip); if (ret) - goto fail1; + goto err_init; dev_info(&client->dev, "%s Programmable led chip found\n", id->name); @@ -1030,11 +1046,6 @@ static int lp5523_probe(struct i2c_client *client, goto fail1; } } - ret = lp5523_configure(client); - if (ret < 0) { - dev_err(&client->dev, "error configuring chip\n"); - goto fail1; - } ret = lp5523_register_leds(chip, id->name); if (ret) @@ -1050,6 +1061,7 @@ static int lp5523_probe(struct i2c_client *client, lp5523_unregister_leds(chip); fail1: lp5523_deinit_device(chip); +err_init: return ret; }