]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
omap: rx51: Add supplies for the tlv320aic3x codec driver
authorJarkko Nikula <jhnikula@gmail.com>
Mon, 10 May 2010 21:29:19 +0000 (14:29 -0700)
committerTony Lindgren <tony@atomide.com>
Thu, 20 May 2010 17:53:55 +0000 (10:53 -0700)
Upcoming change to tlv320aic3x codec driver require four supplies.
Implement this by connecting analogic supplies to TWL4030 VMMC2 and digital
supplies to TWL4030 VIO.

Signed-off-by: Jarkko Nikula <jhnikula@gmail.com>
Cc: Eduardo Valentin <eduardo.valentin@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/board-rx51-peripherals.c

index 3addfe6466259d28caee48786ec6a4d7440f3e50..8179d55106d554edbecb30832b63b1214a5d8520 100644 (file)
@@ -277,7 +277,7 @@ static struct regulator_consumer_supply rx51_vmmc1_supply = {
        .dev_name = "mmci-omap-hs.0",
 };
 
-static struct regulator_consumer_supply rx51_vmmc2_supply = {
+static struct regulator_consumer_supply rx51_vaux3_supply = {
        .supply   = "vmmc",
        .dev_name = "mmci-omap-hs.1",
 };
@@ -287,6 +287,35 @@ static struct regulator_consumer_supply rx51_vsim_supply = {
        .dev_name = "mmci-omap-hs.1",
 };
 
+static struct regulator_consumer_supply rx51_vmmc2_supplies[] = {
+       /* tlv320aic3x analog supplies */
+       {
+               .supply         = "AVDD",
+               .dev_name       = "2-0018",
+       },
+       {
+               .supply         = "DRVDD",
+               .dev_name       = "2-0018",
+       },
+       /* Keep vmmc as last item. It is not iterated for newer boards */
+       {
+               .supply         = "vmmc",
+               .dev_name       = "mmci-omap-hs.1",
+       },
+};
+
+static struct regulator_consumer_supply rx51_vio_supplies[] = {
+       /* tlv320aic3x digital supplies */
+       {
+               .supply         = "IOVDD",
+               .dev_name       = "2-0018"
+       },
+       {
+               .supply         = "DVDD",
+               .dev_name       = "2-0018"
+       },
+};
+
 static struct regulator_init_data rx51_vaux1 = {
        .constraints = {
                .name                   = "V28",
@@ -338,7 +367,7 @@ static struct regulator_init_data rx51_vaux3_mmc = {
                                        | REGULATOR_CHANGE_STATUS,
        },
        .num_consumer_supplies  = 1,
-       .consumer_supplies      = &rx51_vmmc2_supply,
+       .consumer_supplies      = &rx51_vaux3_supply,
 };
 
 static struct regulator_init_data rx51_vaux4 = {
@@ -380,8 +409,8 @@ static struct regulator_init_data rx51_vmmc2 = {
                                        | REGULATOR_CHANGE_MODE
                                        | REGULATOR_CHANGE_STATUS,
        },
-       .num_consumer_supplies  = 1,
-       .consumer_supplies      = &rx51_vmmc2_supply,
+       .num_consumer_supplies  = ARRAY_SIZE(rx51_vmmc2_supplies),
+       .consumer_supplies      = rx51_vmmc2_supplies,
 };
 
 static struct regulator_init_data rx51_vsim = {
@@ -411,6 +440,20 @@ static struct regulator_init_data rx51_vdac = {
        },
 };
 
+static struct regulator_init_data rx51_vio = {
+       .constraints = {
+               .min_uV                 = 1800000,
+               .max_uV                 = 1800000,
+               .valid_modes_mask       = REGULATOR_MODE_NORMAL
+                                       | REGULATOR_MODE_STANDBY,
+               .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
+                                       | REGULATOR_CHANGE_MODE
+                                       | REGULATOR_CHANGE_STATUS,
+       },
+       .num_consumer_supplies  = ARRAY_SIZE(rx51_vio_supplies),
+       .consumer_supplies      = rx51_vio_supplies,
+};
+
 static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
 {
        /* FIXME this gpio setup is just a placeholder for now */
@@ -618,6 +661,7 @@ static struct twl4030_platform_data rx51_twldata __initdata = {
        .vmmc1                  = &rx51_vmmc1,
        .vsim                   = &rx51_vsim,
        .vdac                   = &rx51_vdac,
+       .vio                    = &rx51_vio,
 };
 
 static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_1[] = {
@@ -638,12 +682,14 @@ static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = {
 static int __init rx51_i2c_init(void)
 {
        if ((system_rev >= SYSTEM_REV_S_USES_VAUX3 && system_rev < 0x100) ||
-           system_rev >= SYSTEM_REV_B_USES_VAUX3)
+           system_rev >= SYSTEM_REV_B_USES_VAUX3) {
                rx51_twldata.vaux3 = &rx51_vaux3_mmc;
-       else {
+               /* Only older boards use VMMC2 for internal MMC */
+               rx51_vmmc2.num_consumer_supplies--;
+       } else {
                rx51_twldata.vaux3 = &rx51_vaux3_cam;
-               rx51_twldata.vmmc2 = &rx51_vmmc2;
        }
+       rx51_twldata.vmmc2 = &rx51_vmmc2;
        omap_register_i2c_bus(1, 2200, rx51_peripherals_i2c_board_info_1,
                              ARRAY_SIZE(rx51_peripherals_i2c_board_info_1));
        omap_register_i2c_bus(2, 100, rx51_peripherals_i2c_board_info_2,