summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeerthy <j-keerthy@ti.com>2016-10-26 13:42:30 +0530
committerSimon Glass <sjg@chromium.org>2016-11-25 10:00:04 -0700
commit2f5d532f3b8a7697dc1b5700000b1e350323d50c (patch)
tree07e3089822b28a37bf0f0264c273094763d778cb
parent543bd27353d2c5679057fe09aa2d02259687ff32 (diff)
downloadu-boot-2f5d532f3b8a7697dc1b5700000b1e350323d50c.tar.gz
u-boot-2f5d532f3b8a7697dc1b5700000b1e350323d50c.tar.xz
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.c5
-rw-r--r--drivers/power/regulator/regulator-uclass.c14
-rw-r--r--include/power/regulator.h10
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