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