diff options
-rw-r--r-- | drivers/regulator/pwm-regulator.c | 9 |
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 | } |