regulator: core: Make set_voltage_tol() try for mid-range first
The expected semantic for something expressed as a tolerance is that it should deliver the specified value with some deviation allowed but this is not what set_voltage_tol() currently does. Instead it just passes the maximum possible range to set_voltage() which will typically result in a voltage aimed at lower than the target voltage. Instead first try to set a voltage between the target voltage and the upper limit, then fall back on the full range. This will be much more robust against physical variation in systems and makes the API behave more like users would expect. Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
parent
ad81f0545e
commit
dc9ceed6a1
|
@ -369,8 +369,11 @@ static inline int regulator_count_voltages(struct regulator *regulator)
|
|||
static inline int regulator_set_voltage_tol(struct regulator *regulator,
|
||||
int new_uV, int tol_uV)
|
||||
{
|
||||
return regulator_set_voltage(regulator,
|
||||
new_uV - tol_uV, new_uV + tol_uV);
|
||||
if (regulator_set_voltage(regulator, new_uV, new_uV + tol_uV) == 0)
|
||||
return 0;
|
||||
else
|
||||
return regulator_set_voltage(regulator,
|
||||
new_uV - tol_uV, new_uV + tol_uV);
|
||||
}
|
||||
|
||||
static inline int regulator_is_supported_voltage_tol(struct regulator *regulator,
|
||||
|
|
Loading…
Reference in a new issue