summaryrefslogtreecommitdiff
path: root/drivers/regulator
diff options
context:
space:
mode:
authorChen-Yu Tsai <wens@csie.org>2016-08-21 10:11:19 +0800
committerKlaus Goger <klaus.goger@theobroma-systems.com>2016-09-18 15:44:22 +0200
commit18c228f1ca751dbd1a70d1e52c005e42c6e15ed9 (patch)
tree8058fa82cac170400eac61ccc8faebe7ded0c3c9 /drivers/regulator
parent32c64e6d5232994f650b3b0ca298e994fc1834ab (diff)
regulator: core: Try full range when adjusting regulators to constraints
Currently when we try to bring regulator in bounds of its constraints, we pick either the minimum or maximum voltage as the target. This fails if the regulator range is not continuous, and the target voltage is not an exact value the regulator can achieve, i.e. the target is not aligned to the step of the regulator. Instead pass the full range of the constraints, and have the regulator core work out a suitable voltage within. Fixes: ("regulator: core: Ensure we are at least in bounds for our constraints") Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Diffstat (limited to 'drivers/regulator')
-rw-r--r--drivers/regulator/core.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index db320e8fa865..86f69c92ce7a 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -897,13 +897,9 @@ static int machine_constraints_voltage(struct regulator_dev *rdev,
target_min = current_uV;
target_max = current_uV;
- if (current_uV < rdev->constraints->min_uV) {
+ if (current_uV < rdev->constraints->min_uV ||
+ current_uV > rdev->constraints->max_uV) {
target_min = rdev->constraints->min_uV;
- target_max = rdev->constraints->min_uV;
- }
-
- if (current_uV > rdev->constraints->max_uV) {
- target_min = rdev->constraints->max_uV;
target_max = rdev->constraints->max_uV;
}