diff options
author | Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com> | 2018-08-22 12:53:27 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2018-08-28 22:30:24 +0300 |
commit | e7d80b6b848b4b5f83d3fbee9fd042d036ede9c6 (patch) | |
tree | 4bc8be6103c7cc943828e977ec68f7a97cadd96c /drivers/regulator/helpers.c | |
parent | 61b2e6741e81226c29a5ed92fd886f11efb78e98 (diff) |
regulator: regmap helpers - support overlapping linear ranges
Don't give up voltage mapping if first range with suitable min/max uV
does not provide the wanted voltage.
Signed-off-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/regulator/helpers.c')
-rw-r--r-- | drivers/regulator/helpers.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/regulator/helpers.c b/drivers/regulator/helpers.c index 2ae7c3ac5940..ef09021dc46e 100644 --- a/drivers/regulator/helpers.c +++ b/drivers/regulator/helpers.c @@ -321,17 +321,18 @@ int regulator_map_voltage_linear_range(struct regulator_dev *rdev, ret += range->min_sel; - break; + /* + * Map back into a voltage to verify we're still in bounds. + * If we are not, then continue checking rest of the ranges. + */ + voltage = rdev->desc->ops->list_voltage(rdev, ret); + if (voltage >= min_uV && voltage <= max_uV) + break; } if (i == rdev->desc->n_linear_ranges) return -EINVAL; - /* Map back into a voltage to verify we're still in bounds */ - voltage = rdev->desc->ops->list_voltage(rdev, ret); - if (voltage < min_uV || voltage > max_uV) - return -EINVAL; - return ret; } EXPORT_SYMBOL_GPL(regulator_map_voltage_linear_range); |