diff options
author | Dan Murphy <dmurphy@ti.com> | 2017-11-15 14:52:13 -0500 |
---|---|---|
committer | Jacek Anaszewski <jacek.anaszewski@gmail.com> | 2018-01-08 15:28:10 -0500 |
commit | b12ef03a38b20e1bfaa163ed1632625fedd570ee (patch) | |
tree | 099ad982c09f0af33e98325f158ef3e56ec2d1a2 | |
parent | 8a7a76c80043879b891ad2c291aa0fd8166a48d6 (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.c | 24 |
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 | |||
287 | out: | 301 | out: |
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 | ||