regulator: TPS65910: Create an array for reg init data
authorKyle Manna <kyle.manna@fuel7.com>
Wed, 2 Nov 2011 12:01:30 +0000 (17:31 +0530)
committerVaibhav Hiremath <hvaibhav@ti.com>
Mon, 23 Jan 2012 19:14:40 +0000 (00:44 +0530)
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: Vaibhav Hiremath <hvaibhav@ti.com>
drivers/regulator/tps65910-regulator.c
include/linux/mfd/tps65910.h

index a623574c94e19702618d547ae6dc37cf5b3194b1..bb2a08d4e93e01aa6a1ff0c9da1969b611be557f 100644 (file)
@@ -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;
 
index 6586209f18b80af263f28da46479c4bdf21fda45..cfc1f76d1d3c77ceec6cb7ac731e051eb5e9e1f5 100644 (file)
 #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.
@@ -783,7 +786,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];
 };
 
 /**