summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Manna <kyle.manna@fuel7.com>2011-11-03 12:08:06 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2011-11-23 14:02:48 +0000
commitc1fc1480249dfe059254779a4bb7ca27cf5f8038 (patch)
treecafbba26ca72d2720b3eca5e279c61d8638627af
parent72c108cc4947db2fcdd3f3e8a2b60bd65e74a1cc (diff)
downloadlwn-c1fc1480249dfe059254779a4bb7ca27cf5f8038.tar.gz
lwn-c1fc1480249dfe059254779a4bb7ca27cf5f8038.zip
regulator: TPS65910: Create an array for init data
Create an array of fixed size for the platform to pass regulator initalization data through. Passing an array of pointers to init data also allows more flexible definition of init data as well as prevents reading past the end of the array should the platform define an incorrectly sized array. Signed-off-by: Kyle Manna <kyle.manna@fuel7.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r--drivers/regulator/tps65910-regulator.c13
-rw-r--r--include/linux/mfd/tps65910.h5
2 files changed, 14 insertions, 4 deletions
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
index 44b4f22a7f9f..a620e25c85c4 100644
--- a/drivers/regulator/tps65910-regulator.c
+++ b/drivers/regulator/tps65910-regulator.c
@@ -861,8 +861,6 @@ static __devinit int tps65910_probe(struct platform_device *pdev)
if (!pmic_plat_data)
return -EINVAL;
- reg_data = pmic_plat_data->tps65910_pmic_init_data;
-
pmic = kzalloc(sizeof(*pmic), GFP_KERNEL);
if (!pmic)
return -ENOMEM;
@@ -913,7 +911,16 @@ static __devinit int tps65910_probe(struct platform_device *pdev)
goto err_free_info;
}
- for (i = 0; i < pmic->num_regulators; i++, info++, reg_data++) {
+ for (i = 0; i < pmic->num_regulators && i < TPS65910_NUM_REGS;
+ i++, info++) {
+
+ reg_data = pmic_plat_data->tps65910_pmic_init_data[i];
+
+ /* Regulator API handles empty constraints but not NULL
+ * constraints */
+ if (!reg_data)
+ continue;
+
/* Register the regulators */
pmic->info[i] = info;
diff --git a/include/linux/mfd/tps65910.h b/include/linux/mfd/tps65910.h
index fc5205d0bd14..03a035d2236b 100644
--- a/include/linux/mfd/tps65910.h
+++ b/include/linux/mfd/tps65910.h
@@ -764,6 +764,9 @@
#define TPS65911_REG_LDO7 11
#define TPS65911_REG_LDO8 12
+/* Max number of TPS65910/11 regulators */
+#define TPS65910_NUM_REGS 13
+
/**
* struct tps65910_board
* Board platform data may be used to initialize regulators.
@@ -775,7 +778,7 @@ struct tps65910_board {
int irq_base;
int vmbch_threshold;
int vmbch2_threshold;
- struct regulator_init_data *tps65910_pmic_init_data;
+ struct regulator_init_data *tps65910_pmic_init_data[TPS65910_NUM_REGS];
};
/**