aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/regulator/pwm-regulator.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/regulator/pwm-regulator.c b/drivers/regulator/pwm-regulator.c
index 90f8b7fd0437..666bc3bb52ef 100644
--- a/drivers/regulator/pwm-regulator.c
+++ b/drivers/regulator/pwm-regulator.c
@@ -145,6 +145,7 @@ static int pwm_regulator_set_voltage(struct regulator_dev *rdev,
145 unsigned int duty_pulse; 145 unsigned int duty_pulse;
146 u64 req_period; 146 u64 req_period;
147 u32 rem; 147 u32 rem;
148 int old_uV = pwm_regulator_get_voltage(rdev);
148 int ret; 149 int ret;
149 150
150 pwm_get_args(drvdata->pwm, &pargs); 151 pwm_get_args(drvdata->pwm, &pargs);
@@ -174,8 +175,12 @@ static int pwm_regulator_set_voltage(struct regulator_dev *rdev,
174 175
175 drvdata->volt_uV = min_uV; 176 drvdata->volt_uV = min_uV;
176 177
177 /* Delay required by PWM regulator to settle to the new voltage */ 178 if ((ramp_delay == 0) || !pwm_regulator_is_enabled(rdev))
178 usleep_range(ramp_delay, ramp_delay + 1000); 179 return 0;
180
181 /* Ramp delay is in uV/uS. Adjust to uS and delay */
182 ramp_delay = DIV_ROUND_UP(abs(min_uV - old_uV), ramp_delay);
183 usleep_range(ramp_delay, ramp_delay + DIV_ROUND_UP(ramp_delay, 10));
179 184
180 return 0; 185 return 0;
181} 186}