aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-07-04 12:27:14 -0400
committerMark Brown <broonie@linaro.org>2013-07-15 06:20:08 -0400
commitdc9ceed6a12aff627c81e01ada191e8a23fcbe3e (patch)
tree2eb735c7e63efe9bddd03953337e100ece9d5d33
parentad81f0545ef01ea651886dddac4bef6cec930092 (diff)
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>
-rw-r--r--include/linux/regulator/consumer.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h
index 3a76389c6aaa..3610df8dd229 100644
--- a/include/linux/regulator/consumer.h
+++ b/include/linux/regulator/consumer.h
@@ -369,8 +369,11 @@ static inline int regulator_count_voltages(struct regulator *regulator)
369static inline int regulator_set_voltage_tol(struct regulator *regulator, 369static inline int regulator_set_voltage_tol(struct regulator *regulator,
370 int new_uV, int tol_uV) 370 int new_uV, int tol_uV)
371{ 371{
372 return regulator_set_voltage(regulator, 372 if (regulator_set_voltage(regulator, new_uV, new_uV + tol_uV) == 0)
373 new_uV - tol_uV, new_uV + tol_uV); 373 return 0;
374 else
375 return regulator_set_voltage(regulator,
376 new_uV - tol_uV, new_uV + tol_uV);
374} 377}
375 378
376static inline int regulator_is_supported_voltage_tol(struct regulator *regulator, 379static inline int regulator_is_supported_voltage_tol(struct regulator *regulator,