mirror of https://gitee.com/openkylin/linux.git
regulator: pwm: Retrieve correct voltage
The continuous PWM voltage regulator is caching the voltage value in the ->volt_uV field. While most of the time this value should reflect the real voltage, sometime it can be sightly different if the PWM device rounded the set_duty_cycle request. Moreover, this value is not valid until someone has modified the regulator output. Remove the ->volt_uV field and always rely on the PWM state to calculate the regulator output. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> Reviewed-by: Brian Norris <briannorris@chromium.org> Tested-by: Brian Norris <briannorris@chromium.org> Tested-by: Heiko Stuebner <heiko@sntech.de> Acked-by: Mark Brown <broonie@kernel.org> Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
This commit is contained in:
parent
87248991a1
commit
d9070fdbe4
|
@ -37,9 +37,6 @@ struct pwm_regulator_data {
|
|||
|
||||
int state;
|
||||
|
||||
/* Continuous voltage */
|
||||
int volt_uV;
|
||||
|
||||
/* Enable GPIO */
|
||||
struct gpio_desc *enb_gpio;
|
||||
};
|
||||
|
@ -148,8 +145,13 @@ static int pwm_regulator_is_enabled(struct regulator_dev *dev)
|
|||
static int pwm_regulator_get_voltage(struct regulator_dev *rdev)
|
||||
{
|
||||
struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev);
|
||||
int min_uV = rdev->constraints->min_uV;
|
||||
int diff = rdev->constraints->max_uV - min_uV;
|
||||
struct pwm_state pstate;
|
||||
|
||||
return drvdata->volt_uV;
|
||||
pwm_get_state(drvdata->pwm, &pstate);
|
||||
|
||||
return min_uV + pwm_get_relative_duty_cycle(&pstate, diff);
|
||||
}
|
||||
|
||||
static int pwm_regulator_set_voltage(struct regulator_dev *rdev,
|
||||
|
@ -176,8 +178,6 @@ static int pwm_regulator_set_voltage(struct regulator_dev *rdev,
|
|||
return ret;
|
||||
}
|
||||
|
||||
drvdata->volt_uV = min_uV;
|
||||
|
||||
if ((ramp_delay == 0) || !pwm_regulator_is_enabled(rdev))
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Reference in New Issue