mfd: Add twl6030 regulator subdevices
authorRajendra Nayak <rnayak@ti.com>
Sun, 13 Dec 2009 21:29:47 +0000 (22:29 +0100)
committerSamuel Ortiz <sameo@linux.intel.com>
Sun, 13 Dec 2009 23:26:26 +0000 (00:26 +0100)
This patch adds initial support for creating twl6030 PMIC
specific voltage regulators in the twl mfd driver.

Board specific regulator configurations will have to be passed from
respective board files.

Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Balaji T K <balajitk@ti.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Reviewed-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/mfd/twl-core.c
include/linux/i2c/twl.h

index c48a6138c5753b1889da3b67e027e01710a5b46a..2a7606534196e7849f8cac4b07bbb9751a21484e 100644 (file)
@@ -639,7 +639,7 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features)
                        return PTR_ERR(child);
        }
 
-       if (twl_has_usb() && pdata->usb) {
+       if (twl_has_usb() && pdata->usb && twl_class_is_4030()) {
 
                static struct regulator_consumer_supply usb1v5 = {
                        .supply =       "usb1v5",
@@ -719,7 +719,8 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features)
                        return PTR_ERR(child);
        }
 
-       if (twl_has_regulator()) {
+       /* twl4030 regulators */
+       if (twl_has_regulator() && twl_class_is_4030()) {
                child = add_regulator(TWL4030_REG_VPLL1, pdata->vpll1);
                if (IS_ERR(child))
                        return PTR_ERR(child);
@@ -765,7 +766,8 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features)
        }
 
        /* maybe add LDOs that are omitted on cost-reduced parts */
-       if (twl_has_regulator() && !(features & TPS_SUBSET)) {
+       if (twl_has_regulator() && !(features & TPS_SUBSET)
+         && twl_class_is_4030()) {
                child = add_regulator(TWL4030_REG_VPLL2, pdata->vpll2);
                if (IS_ERR(child))
                        return PTR_ERR(child);
@@ -791,6 +793,49 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features)
                        return PTR_ERR(child);
        }
 
+       /* twl6030 regulators */
+       if (twl_has_regulator() && twl_class_is_6030()) {
+               child = add_regulator(TWL6030_REG_VMMC, pdata->vmmc);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+
+               child = add_regulator(TWL6030_REG_VPP, pdata->vpp);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+
+               child = add_regulator(TWL6030_REG_VUSIM, pdata->vusim);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+
+               child = add_regulator(TWL6030_REG_VANA, pdata->vana);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+
+               child = add_regulator(TWL6030_REG_VCXIO, pdata->vcxio);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+
+               child = add_regulator(TWL6030_REG_VDAC, pdata->vdac);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+
+               child = add_regulator(TWL6030_REG_VUSB, pdata->vusb);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+
+               child = add_regulator(TWL6030_REG_VAUX1_6030, pdata->vaux1);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+
+               child = add_regulator(TWL6030_REG_VAUX2_6030, pdata->vaux2);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+
+               child = add_regulator(TWL6030_REG_VAUX3_6030, pdata->vaux3);
+               if (IS_ERR(child))
+                       return PTR_ERR(child);
+       }
+
        return 0;
 }
 
index 7679e87df177638d2ae9cf32382eca18be26ae99..bf1c5be1f5b66879e238ff6605c17b4787f13ffc 100644 (file)
@@ -560,16 +560,17 @@ struct twl4030_platform_data {
        struct twl4030_power_data               *power;
        struct twl4030_codec_data               *codec;
 
-       /* LDO regulators */
+       /* Common LDO regulators for TWL4030/TWL6030 */
        struct regulator_init_data              *vdac;
+       struct regulator_init_data              *vaux1;
+       struct regulator_init_data              *vaux2;
+       struct regulator_init_data              *vaux3;
+       /* TWL4030 LDO regulators */
        struct regulator_init_data              *vpll1;
        struct regulator_init_data              *vpll2;
        struct regulator_init_data              *vmmc1;
        struct regulator_init_data              *vmmc2;
        struct regulator_init_data              *vsim;
-       struct regulator_init_data              *vaux1;
-       struct regulator_init_data              *vaux2;
-       struct regulator_init_data              *vaux3;
        struct regulator_init_data              *vaux4;
        struct regulator_init_data              *vio;
        struct regulator_init_data              *vdd1;
@@ -577,6 +578,13 @@ struct twl4030_platform_data {
        struct regulator_init_data              *vintana1;
        struct regulator_init_data              *vintana2;
        struct regulator_init_data              *vintdig;
+       /* TWL6030 LDO regulators */
+       struct regulator_init_data              *vmmc;
+       struct regulator_init_data              *vpp;
+       struct regulator_init_data              *vusim;
+       struct regulator_init_data              *vana;
+       struct regulator_init_data              *vcxio;
+       struct regulator_init_data              *vusb;
 };
 
 /*----------------------------------------------------------------------*/