diff options
author | Axel Lin <axel.lin@ingics.com> | 2013-04-18 10:34:49 +0800 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-04-18 12:09:32 +0100 |
commit | fcf371ee5624cc87abac205cd0dad2432d7f0346 (patch) | |
tree | 114e44dec314e4e65ed8e8fc44a82d3aed661536 /drivers/regulator | |
parent | 41ef2d5678d83af030125550329b6ae8b74618fa (diff) | |
download | op-kernel-dev-fcf371ee5624cc87abac205cd0dad2432d7f0346.zip op-kernel-dev-fcf371ee5624cc87abac205cd0dad2432d7f0346.tar.gz |
regulator: core: Add regulator_map_voltage_ascend() API
A lot of regulator hardware has ascendant voltage list.
This patch adds regulator_map_voltage_ascend() and export it.
Drivers that have ascendant voltage list can use this as their map_voltage()
operation, this is more efficient than default regulator_map_voltage_iterate()
function.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/regulator')
-rw-r--r-- | drivers/regulator/core.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index e3661c2..56f4ca0 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -2138,6 +2138,37 @@ int regulator_map_voltage_iterate(struct regulator_dev *rdev, EXPORT_SYMBOL_GPL(regulator_map_voltage_iterate); /** + * regulator_map_voltage_ascend - map_voltage() for ascendant voltage list + * + * @rdev: Regulator to operate on + * @min_uV: Lower bound for voltage + * @max_uV: Upper bound for voltage + * + * Drivers that have ascendant voltage list can use this as their + * map_voltage() operation. + */ +int regulator_map_voltage_ascend(struct regulator_dev *rdev, + int min_uV, int max_uV) +{ + int i, ret; + + for (i = 0; i < rdev->desc->n_voltages; i++) { + ret = rdev->desc->ops->list_voltage(rdev, i); + if (ret < 0) + continue; + + if (ret > max_uV) + break; + + if (ret >= min_uV && ret <= max_uV) + return i; + } + + return -EINVAL; +} +EXPORT_SYMBOL_GPL(regulator_map_voltage_ascend); + +/** * regulator_map_voltage_linear - map_voltage() for simple linear mappings * * @rdev: Regulator to operate on |