]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
omap5: pbias ldo9 turn on
authorBalaji T K <balajitk@ti.com>
Mon, 12 Mar 2012 02:25:49 +0000 (02:25 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Tue, 15 May 2012 06:31:25 +0000 (08:31 +0200)
Add omap5 pbias configuration for mmc1/sd lines
and set voltage for sd data i/o lines

Signed-off-by: Balaji T K <balajitk@ti.com>
arch/arm/include/asm/arch-omap5/omap.h
drivers/mmc/omap_hsmmc.c
drivers/power/twl6035.c
include/twl6035.h

index 27253929699e5cf8f37bfa300495c156a2faa43b..d672b6f9d9fc2207fd01b74c35cbf629573ad90c 100644 (file)
 /* CONTROL_EFUSE_2 */
 #define CONTROL_EFUSE_2_NMOS_PMOS_PTV_CODE_1           0x00ffc000
 
-#define MMC1_PWRDNZ                                    (1 << 26)
-#define MMC1_PBIASLITE_PWRDNZ                          (1 << 22)
-#define MMC1_PBIASLITE_VMODE                           (1 << 21)
+#define SDCARD_PWRDNZ                                  (1 << 26)
+#define SDCARD_BIAS_HIZ_MODE                           (1 << 25)
+#define SDCARD_BIAS_PWRDNZ                             (1 << 22)
+#define SDCARD_PBIASLITE_VMODE                         (1 << 21)
 
 #ifndef __ASSEMBLY__
 
index f421ff9eede0f3e4dba687434ca96608ae4c333d..e3670d4ad48565ac1f4d2dbe340ddd25191fffba 100644 (file)
@@ -29,6 +29,7 @@
 #include <i2c.h>
 #include <twl4030.h>
 #include <twl6030.h>
+#include <twl6035.h>
 #include <asm/io.h>
 #include <asm/arch/mmc_host_def.h>
 #include <asm/arch/sys_proto.h>
@@ -60,6 +61,34 @@ static void omap4_vmmc_pbias_config(struct mmc *mmc)
 }
 #endif
 
+#if defined(CONFIG_OMAP54XX) && defined(CONFIG_TWL6035_POWER)
+static void omap5_pbias_config(struct mmc *mmc)
+{
+       u32 value = 0;
+       struct omap_sys_ctrl_regs *const ctrl =
+               (struct omap_sys_ctrl_regs *) SYSCTRL_GENERAL_CORE_BASE;
+
+       value = readl(&ctrl->control_pbias);
+       value &= ~(SDCARD_PWRDNZ | SDCARD_BIAS_PWRDNZ);
+       value |= SDCARD_BIAS_HIZ_MODE;
+       writel(value, &ctrl->control_pbias);
+
+       twl6035_mmc1_poweron_ldo();
+
+       value = readl(&ctrl->control_pbias);
+       value &= ~SDCARD_BIAS_HIZ_MODE;
+       value |= SDCARD_PBIASLITE_VMODE | SDCARD_PWRDNZ | SDCARD_BIAS_PWRDNZ;
+       writel(value, &ctrl->control_pbias);
+
+       value = readl(&ctrl->control_pbias);
+       if (value & (1 << 23)) {
+               value &= ~(SDCARD_PWRDNZ | SDCARD_BIAS_PWRDNZ);
+               value |= SDCARD_BIAS_HIZ_MODE;
+               writel(value, &ctrl->control_pbias);
+       }
+}
+#endif
+
 unsigned char mmc_board_init(struct mmc *mmc)
 {
 #if defined(CONFIG_TWL4030_POWER)
@@ -99,6 +128,10 @@ unsigned char mmc_board_init(struct mmc *mmc)
        if (mmc->block_dev.dev == 0)
                omap4_vmmc_pbias_config(mmc);
 #endif
+#if defined(CONFIG_OMAP54XX) && defined(CONFIG_TWL6035_POWER)
+       if (mmc->block_dev.dev == 0)
+               omap5_pbias_config(mmc);
+#endif
 
        return 0;
 }
index d75212c9641d2bf53c9b42efec60261e9fc84d7d..624c09e85dc122fc8be04b00674d1ba985b4a6b9 100644 (file)
@@ -34,7 +34,32 @@ int twl6035_i2c_read_u8(u8 chip_no, u8 *val, u8 reg)
        return i2c_read(chip_no, reg, 1, val, 1);
 }
 
+/* To align with i2c mw/mr address, reg, val command syntax */
+static inline int palmas_write_u8(u8 chip_no, u8 reg, u8 val)
+{
+       return i2c_write(chip_no, reg, 1, &val, 1);
+}
+
+static inline int palmas_read_u8(u8 chip_no, u8 reg, u8 *val)
+{
+       return i2c_read(chip_no, reg, 1, val, 1);
+}
+
 void twl6035_init_settings(void)
 {
        return;
 }
+
+void twl6035_mmc1_poweron_ldo(void)
+{
+       u8 val = 0;
+
+       /* set LDO9 TWL6035 to 3V */
+       val = 0x2b; /* (3 -.9)*28 +1 */
+       palmas_write_u8(0x48, LDO9_VOLTAGE, val);
+
+       /* TURN ON LDO9 */
+       val = LDO_ON | LDO_MODE_SLEEP | LDO_MODE_ACTIVE;
+       palmas_write_u8(0x48, LDO9_CTRL, val);
+       return;
+}
index 1e133175d72b032fae632c79a548f5f1bb848923..e21ddbaf22fcbd6a5e220f7eb28353a60b4af5de 100644 (file)
@@ -39,3 +39,4 @@
 int twl6035_i2c_write_u8(u8 chip_no, u8 val, u8 reg);
 int twl6035_i2c_read_u8(u8 chip_no, u8 *val, u8 reg);
 void twl6035_init_settings(void);
+void twl6035_mmc1_poweron_ldo(void);