aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator/core.c
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2013-07-18 10:21:57 -0400
committerMark Brown <broonie@linaro.org>2013-07-18 10:55:09 -0400
commita56d66a2f01b172bc00d73b0b0392423c8aaae19 (patch)
tree3ce675637f8b26f4fe3b3928233de8c587eecaee /drivers/regulator/core.c
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>
Diffstat (limited to 'drivers/regulator/core.c')
-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 e8604be4c66d..fd3f6e003729 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,
2436 if (min_uV <= range->min_uV) 2436 if (min_uV <= range->min_uV)
2437 min_uV = range->min_uV; 2437 min_uV = range->min_uV;
2438 2438
2439 ret = DIV_ROUND_UP(min_uV - range->min_uV, range->uV_step); 2439 /* range->uV_step == 0 means fixed voltage range */
2440 if (ret < 0) 2440 if (range->uV_step == 0) {
2441 return ret; 2441 ret = 0;
2442 } else {
2443 ret = DIV_ROUND_UP(min_uV - range->min_uV,
2444 range->uV_step);
2445 if (ret < 0)
2446 return ret;
2447 }
2442 2448
2443 break; 2449 break;
2444 } 2450 }