regulator: pm8921-regulator: Add enable_time platform data entry
Add an enable_time platform data member which can be used to specify
the board dependent enable (rise) time of each regulator.
Signed-off-by: David Collins <collinsd@codeaurora.org>
diff --git a/drivers/regulator/pm8921-regulator.c b/drivers/regulator/pm8921-regulator.c
index a2246eb..d6a7041 100644
--- a/drivers/regulator/pm8921-regulator.c
+++ b/drivers/regulator/pm8921-regulator.c
@@ -2502,6 +2502,13 @@
return rc;
}
+static int pm8921_enable_time(struct regulator_dev *rdev)
+{
+ struct pm8921_vreg *vreg = rdev_get_drvdata(rdev);
+
+ return vreg->pdata.enable_time;
+}
+
static const char const *pm8921_print_actions[] = {
[PM8921_REGULATOR_ACTION_INIT] = "initial ",
[PM8921_REGULATOR_ACTION_ENABLE] = "enable ",
@@ -2627,6 +2634,7 @@
.set_mode = pm8921_ldo_set_mode,
.get_mode = pm8921_ldo_get_mode,
.get_optimum_mode = pm8921_vreg_get_optimum_mode,
+ .enable_time = pm8921_enable_time,
};
static struct regulator_ops pm8921_nldo_ops = {
@@ -2639,6 +2647,7 @@
.set_mode = pm8921_ldo_set_mode,
.get_mode = pm8921_ldo_get_mode,
.get_optimum_mode = pm8921_vreg_get_optimum_mode,
+ .enable_time = pm8921_enable_time,
};
static struct regulator_ops pm8921_nldo1200_ops = {
@@ -2651,6 +2660,7 @@
.set_mode = pm8921_nldo1200_set_mode,
.get_mode = pm8921_nldo1200_get_mode,
.get_optimum_mode = pm8921_vreg_get_optimum_mode,
+ .enable_time = pm8921_enable_time,
};
static struct regulator_ops pm8921_smps_ops = {
@@ -2663,6 +2673,7 @@
.set_mode = pm8921_smps_set_mode,
.get_mode = pm8921_smps_get_mode,
.get_optimum_mode = pm8921_vreg_get_optimum_mode,
+ .enable_time = pm8921_enable_time,
};
static struct regulator_ops pm8921_ftsmps_ops = {
@@ -2675,18 +2686,21 @@
.set_mode = pm8921_ftsmps_set_mode,
.get_mode = pm8921_ftsmps_get_mode,
.get_optimum_mode = pm8921_vreg_get_optimum_mode,
+ .enable_time = pm8921_enable_time,
};
static struct regulator_ops pm8921_vs_ops = {
.enable = pm8921_vs_enable,
.disable = pm8921_vs_disable,
.is_enabled = pm8921_vreg_is_enabled,
+ .enable_time = pm8921_enable_time,
};
static struct regulator_ops pm8921_vs300_ops = {
.enable = pm8921_vs300_enable,
.disable = pm8921_vs300_disable,
.is_enabled = pm8921_vreg_is_enabled,
+ .enable_time = pm8921_enable_time,
};
static struct regulator_ops pm8921_ncp_ops = {
@@ -2696,6 +2710,7 @@
.set_voltage = pm8921_ncp_set_voltage,
.get_voltage = pm8921_ncp_get_voltage,
.list_voltage = pm8921_ncp_list_voltage,
+ .enable_time = pm8921_enable_time,
};
/* Pin control regulator operations. */
diff --git a/include/linux/regulator/pm8921-regulator.h b/include/linux/regulator/pm8921-regulator.h
index 5ed5b0d..2eac548 100644
--- a/include/linux/regulator/pm8921-regulator.h
+++ b/include/linux/regulator/pm8921-regulator.h
@@ -142,6 +142,9 @@
* @pin_fn: action to perform when pin control pin is active
* @system_uA: current drawn from regulator not accounted for by any
* regulator framework consumer
+ * @enable_time: time in us taken to enable a regulator to the maximum
+ * allowed voltage for the system. This is dependent upon
+ * the load and capacitance for a regulator on the board.
*/
struct pm8921_regulator_platform_data {
struct regulator_init_data init_data;
@@ -150,6 +153,7 @@
unsigned pin_ctrl;
enum pm8921_vreg_pin_function pin_fn;
int system_uA;
+ int enable_time;
};
#endif