diff options
author | Keerthy <j-keerthy@ti.com> | 2016-10-26 13:42:30 +0530 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2016-11-25 10:00:04 -0700 |
commit | 2f5d532f3b8a7697dc1b5700000b1e350323d50c (patch) | |
tree | 07e3089822b28a37bf0f0264c273094763d778cb | |
parent | 543bd27353d2c5679057fe09aa2d02259687ff32 (diff) | |
download | u-boot-2f5d532f3b8a7697dc1b5700000b1e350323d50c.tar.gz u-boot-2f5d532f3b8a7697dc1b5700000b1e350323d50c.tar.bz2 u-boot-2f5d532f3b8a7697dc1b5700000b1e350323d50c.zip |
power: regulator: Introduce regulator_set_value_force function
In case we want to force a particular value on a regulator
irrespective of the min/max constraints for testing purposes
one can call regulator_set_value_force function.
Signed-off-by: Keerthy <j-keerthy@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | cmd/regulator.c | 5 | ||||
-rw-r--r-- | drivers/power/regulator/regulator-uclass.c | 14 | ||||
-rw-r--r-- | include/power/regulator.h | 10 |
3 files changed, 28 insertions, 1 deletions
diff --git a/cmd/regulator.c b/cmd/regulator.c index bfea6e04b6..2ef5bc9a82 100644 --- a/cmd/regulator.c +++ b/cmd/regulator.c @@ -292,7 +292,10 @@ static int do_value(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return CMD_RET_FAILURE; } - ret = regulator_set_value(dev, value); + if (!force) + ret = regulator_set_value(dev, value); + else + ret = regulator_set_value_force(dev, value); if (ret) { printf("Regulator: %s - can't set the Voltage!\n", uc_pdata->name); diff --git a/drivers/power/regulator/regulator-uclass.c b/drivers/power/regulator/regulator-uclass.c index 4434e36312..d64400981f 100644 --- a/drivers/power/regulator/regulator-uclass.c +++ b/drivers/power/regulator/regulator-uclass.c @@ -48,6 +48,20 @@ int regulator_set_value(struct udevice *dev, int uV) return ops->set_value(dev, uV); } +/* + * To be called with at most caution as there is no check + * before setting the actual voltage value. + */ +int regulator_set_value_force(struct udevice *dev, int uV) +{ + const struct dm_regulator_ops *ops = dev_get_driver_ops(dev); + + if (!ops || !ops->set_value) + return -ENOSYS; + + return ops->set_value(dev, uV); +} + int regulator_get_current(struct udevice *dev) { const struct dm_regulator_ops *ops = dev_get_driver_ops(dev); diff --git a/include/power/regulator.h b/include/power/regulator.h index f47ab6740b..1a8e5753d7 100644 --- a/include/power/regulator.h +++ b/include/power/regulator.h @@ -261,6 +261,16 @@ int regulator_get_value(struct udevice *dev); int regulator_set_value(struct udevice *dev, int uV); /** + * regulator_set_value_force: set the microvoltage value of a given regulator + * without any min-,max condition check + * + * @dev - pointer to the regulator device + * @uV - the output value to set [micro Volts] + * @return - 0 on success or -errno val if fails + */ +int regulator_set_value_force(struct udevice *dev, int uV); + +/** * regulator_get_current: get microampere value of a given regulator * * @dev - pointer to the regulator device |