|
@@ -1839,10 +1839,12 @@ static int _regulator_do_enable(struct regulator_dev *rdev)
|
|
|
}
|
|
|
|
|
|
if (rdev->ena_pin) {
|
|
|
- ret = regulator_ena_gpio_ctrl(rdev, true);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
- rdev->ena_gpio_state = 1;
|
|
|
+ if (!rdev->ena_gpio_state) {
|
|
|
+ ret = regulator_ena_gpio_ctrl(rdev, true);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+ rdev->ena_gpio_state = 1;
|
|
|
+ }
|
|
|
} else if (rdev->desc->ops->enable) {
|
|
|
ret = rdev->desc->ops->enable(rdev);
|
|
|
if (ret < 0)
|
|
@@ -1939,10 +1941,12 @@ static int _regulator_do_disable(struct regulator_dev *rdev)
|
|
|
trace_regulator_disable(rdev_get_name(rdev));
|
|
|
|
|
|
if (rdev->ena_pin) {
|
|
|
- ret = regulator_ena_gpio_ctrl(rdev, false);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
- rdev->ena_gpio_state = 0;
|
|
|
+ if (rdev->ena_gpio_state) {
|
|
|
+ ret = regulator_ena_gpio_ctrl(rdev, false);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+ rdev->ena_gpio_state = 0;
|
|
|
+ }
|
|
|
|
|
|
} else if (rdev->desc->ops->disable) {
|
|
|
ret = rdev->desc->ops->disable(rdev);
|
|
@@ -3633,12 +3637,6 @@ regulator_register(const struct regulator_desc *regulator_desc,
|
|
|
config->ena_gpio, ret);
|
|
|
goto wash;
|
|
|
}
|
|
|
-
|
|
|
- if (config->ena_gpio_flags & GPIOF_OUT_INIT_HIGH)
|
|
|
- rdev->ena_gpio_state = 1;
|
|
|
-
|
|
|
- if (config->ena_gpio_invert)
|
|
|
- rdev->ena_gpio_state = !rdev->ena_gpio_state;
|
|
|
}
|
|
|
|
|
|
/* set regulator constraints */
|