regulator: core: Allow fixed voltage range in multiple linear ranges
authorAxel Lin <axel.lin@ingics.com>
Thu, 18 Jul 2013 14:21:57 +0000 (22:21 +0800)
committerMark Brown <broonie@linaro.org>
Thu, 18 Jul 2013 14:55:09 +0000 (15:55 +0100)
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>
drivers/regulator/core.c

index e8604be4c66d2909b1948bca4ac57be72b073148..fd3f6e003729e84579d75e11ec5cd56a023febf8 100644 (file)
@@ -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;
        }
This page took 0.026671 seconds and 5 git commands to generate.