leds: lp8860: Add regulator enable during init
authorDan Murphy <dmurphy@ti.com>
Wed, 15 Nov 2017 19:52:13 +0000 (13:52 -0600)
committerJacek Anaszewski <jacek.anaszewski@gmail.com>
Mon, 8 Jan 2018 20:28:10 +0000 (21:28 +0100)
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>
drivers/leds/leds-lp8860.c

index 91b6c5f..f91a4fe 100644 (file)
@@ -247,6 +247,15 @@ static int lp8860_init(struct lp8860_led *led)
        unsigned int read_buf;
        int ret, i, reg_count;
 
+       if (led->regulator) {
+               ret = regulator_enable(led->regulator);
+               if (ret) {
+                       dev_err(&led->client->dev,
+                               "Failed to enable regulator\n");
+                       return ret;
+               }
+       }
+
        if (led->enable_gpio)
                gpiod_direction_output(led->enable_gpio, 1);
 
@@ -282,12 +291,25 @@ static int lp8860_init(struct lp8860_led *led)
        ret = regmap_write(led->regmap,
                        LP8860_EEPROM_CNTRL,
                        LP8860_PROGRAM_EEPROM);
-       if (ret)
+       if (ret) {
                dev_err(&led->client->dev, "Failed programming EEPROM\n");
+               goto out;
+       }
+
+       return ret;
+
 out:
        if (ret)
                if (led->enable_gpio)
                        gpiod_direction_output(led->enable_gpio, 0);
+
+       if (led->regulator) {
+               ret = regulator_disable(led->regulator);
+               if (ret)
+                       dev_err(&led->client->dev,
+                               "Failed to disable regulator\n");
+       }
+
        return ret;
 }