summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2013-07-18 22:21:57 +0800
committerMark Brown <broonie@linaro.org>2013-07-18 15:55:09 +0100
commita56d66a2f01b172bc00d73b0b0392423c8aaae19 (patch)
tree3ce675637f8b26f4fe3b3928233de8c587eecaee
parentc36a1cdf96dd3a4e6b612d6847bff6c7086e358b (diff)
regulator: core: Allow fixed voltage range in multiple linear ranges
Current code does not allow fixed voltage range in multiple linear ranges. If someone does set range->uV_step == 0 in one of the linear ranges, we hit divided by zero bug. This patch fixes this issue. For fixed voltage range, return any selector means the same voltage. Thus just return 0. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--drivers/regulator/core.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index e8604be4c66..fd3f6e00372 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -2436,9 +2436,15 @@ int regulator_map_voltage_linear_range(struct regulator_dev *rdev,
if (min_uV <= range->min_uV)
min_uV = range->min_uV;
- ret = DIV_ROUND_UP(min_uV - range->min_uV, range->uV_step);
- if (ret < 0)
- return ret;
+ /* range->uV_step == 0 means fixed voltage range */
+ if (range->uV_step == 0) {
+ ret = 0;
+ } else {
+ ret = DIV_ROUND_UP(min_uV - range->min_uV,
+ range->uV_step);
+ if (ret < 0)
+ return ret;
+ }
break;
}