diff options
| -rw-r--r-- | drivers/regulator/core.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 0e271e57504a..fafeb32427c1 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
| @@ -1839,10 +1839,12 @@ static int _regulator_do_enable(struct regulator_dev *rdev) | |||
| 1839 | } | 1839 | } |
| 1840 | 1840 | ||
| 1841 | if (rdev->ena_pin) { | 1841 | if (rdev->ena_pin) { |
| 1842 | ret = regulator_ena_gpio_ctrl(rdev, true); | 1842 | if (!rdev->ena_gpio_state) { |
| 1843 | if (ret < 0) | 1843 | ret = regulator_ena_gpio_ctrl(rdev, true); |
| 1844 | return ret; | 1844 | if (ret < 0) |
| 1845 | rdev->ena_gpio_state = 1; | 1845 | return ret; |
| 1846 | rdev->ena_gpio_state = 1; | ||
| 1847 | } | ||
| 1846 | } else if (rdev->desc->ops->enable) { | 1848 | } else if (rdev->desc->ops->enable) { |
| 1847 | ret = rdev->desc->ops->enable(rdev); | 1849 | ret = rdev->desc->ops->enable(rdev); |
| 1848 | if (ret < 0) | 1850 | if (ret < 0) |
| @@ -1939,10 +1941,12 @@ static int _regulator_do_disable(struct regulator_dev *rdev) | |||
| 1939 | trace_regulator_disable(rdev_get_name(rdev)); | 1941 | trace_regulator_disable(rdev_get_name(rdev)); |
| 1940 | 1942 | ||
| 1941 | if (rdev->ena_pin) { | 1943 | if (rdev->ena_pin) { |
| 1942 | ret = regulator_ena_gpio_ctrl(rdev, false); | 1944 | if (rdev->ena_gpio_state) { |
| 1943 | if (ret < 0) | 1945 | ret = regulator_ena_gpio_ctrl(rdev, false); |
| 1944 | return ret; | 1946 | if (ret < 0) |
| 1945 | rdev->ena_gpio_state = 0; | 1947 | return ret; |
| 1948 | rdev->ena_gpio_state = 0; | ||
| 1949 | } | ||
| 1946 | 1950 | ||
| 1947 | } else if (rdev->desc->ops->disable) { | 1951 | } else if (rdev->desc->ops->disable) { |
| 1948 | ret = rdev->desc->ops->disable(rdev); | 1952 | ret = rdev->desc->ops->disable(rdev); |
| @@ -3633,12 +3637,6 @@ regulator_register(const struct regulator_desc *regulator_desc, | |||
| 3633 | config->ena_gpio, ret); | 3637 | config->ena_gpio, ret); |
| 3634 | goto wash; | 3638 | goto wash; |
| 3635 | } | 3639 | } |
| 3636 | |||
| 3637 | if (config->ena_gpio_flags & GPIOF_OUT_INIT_HIGH) | ||
| 3638 | rdev->ena_gpio_state = 1; | ||
| 3639 | |||
| 3640 | if (config->ena_gpio_invert) | ||
| 3641 | rdev->ena_gpio_state = !rdev->ena_gpio_state; | ||
| 3642 | } | 3640 | } |
| 3643 | 3641 | ||
| 3644 | /* set regulator constraints */ | 3642 | /* set regulator constraints */ |
