aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Murphy <dmurphy@ti.com>2017-11-15 14:52:13 -0500
committerJacek Anaszewski <jacek.anaszewski@gmail.com>2018-01-08 15:28:10 -0500
commitb12ef03a38b20e1bfaa163ed1632625fedd570ee (patch)
tree099ad982c09f0af33e98325f158ef3e56ec2d1a2
parent8a7a76c80043879b891ad2c291aa0fd8166a48d6 (diff)
leds: lp8860: Add regulator enable during init
Add the regulator enable call during initialization. If init fails then disable the regulator. Also during init the gpio gets set low even on a passing case so add if everything passes then return. Signed-off-by: Dan Murphy <dmurphy@ti.com> Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
-rw-r--r--drivers/leds/leds-lp8860.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/drivers/leds/leds-lp8860.c b/drivers/leds/leds-lp8860.c
index 91b6c5fbd361..f91a4fe25168 100644
--- a/drivers/leds/leds-lp8860.c
+++ b/drivers/leds/leds-lp8860.c
@@ -247,6 +247,15 @@ static int lp8860_init(struct lp8860_led *led)
247 unsigned int read_buf; 247 unsigned int read_buf;
248 int ret, i, reg_count; 248 int ret, i, reg_count;
249 249
250 if (led->regulator) {
251 ret = regulator_enable(led->regulator);
252 if (ret) {
253 dev_err(&led->client->dev,
254 "Failed to enable regulator\n");
255 return ret;
256 }
257 }
258
250 if (led->enable_gpio) 259 if (led->enable_gpio)
251 gpiod_direction_output(led->enable_gpio, 1); 260 gpiod_direction_output(led->enable_gpio, 1);
252 261
@@ -282,12 +291,25 @@ static int lp8860_init(struct lp8860_led *led)
282 ret = regmap_write(led->regmap, 291 ret = regmap_write(led->regmap,
283 LP8860_EEPROM_CNTRL, 292 LP8860_EEPROM_CNTRL,
284 LP8860_PROGRAM_EEPROM); 293 LP8860_PROGRAM_EEPROM);
285 if (ret) 294 if (ret) {
286 dev_err(&led->client->dev, "Failed programming EEPROM\n"); 295 dev_err(&led->client->dev, "Failed programming EEPROM\n");
296 goto out;
297 }
298
299 return ret;
300
287out: 301out:
288 if (ret) 302 if (ret)
289 if (led->enable_gpio) 303 if (led->enable_gpio)
290 gpiod_direction_output(led->enable_gpio, 0); 304 gpiod_direction_output(led->enable_gpio, 0);
305
306 if (led->regulator) {
307 ret = regulator_disable(led->regulator);
308 if (ret)
309 dev_err(&led->client->dev,
310 "Failed to disable regulator\n");
311 }
312
291 return ret; 313 return ret;
292} 314}
293 315