diff mbox

[U-Boot,16/17] omap5: pbias ldo9 turn on

Message ID 1329480333-18353-17-git-send-email-r.sricharan@ti.com
State Changes Requested
Delegated to: Tom Rini
Headers show

Commit Message

SRICHARAN R Feb. 17, 2012, 12:05 p.m. UTC
From: Balaji T K <balajitk@ti.com>

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 |    7 +++--
 drivers/mmc/omap_hsmmc.c               |   33 ++++++++++++++++++++++++++++++++
 drivers/power/twl6035.c                |   14 +++++++++++++
 include/twl6035.h                      |    1 +
 4 files changed, 52 insertions(+), 3 deletions(-)

Comments

Tom Rini Feb. 20, 2012, 5:52 p.m. UTC | #1
On Fri, Feb 17, 2012 at 05:35:32PM +0530, R Sricharan wrote:

> From: Balaji T K <balajitk@ti.com>
> 
> 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>

[snip]
> diff --git a/drivers/power/twl6035.c b/drivers/power/twl6035.c
> index 978a7ad..878117e 100644
> --- a/drivers/power/twl6035.c
> +++ b/drivers/power/twl6035.c
> @@ -51,4 +51,18 @@ 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;
> +}

This is when we should add those two previous inlines.  Please use
git test-sequence to make sure the series is clean, thanks.
diff mbox

Patch

diff --git a/arch/arm/include/asm/arch-omap5/omap.h b/arch/arm/include/asm/arch-omap5/omap.h
index 2725392..d672b6f 100644
--- a/arch/arm/include/asm/arch-omap5/omap.h
+++ b/arch/arm/include/asm/arch-omap5/omap.h
@@ -125,9 +125,10 @@ 
 /* 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__
 
diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c
index afd3266..ef03b9b 100644
--- a/drivers/mmc/omap_hsmmc.c
+++ b/drivers/mmc/omap_hsmmc.c
@@ -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)
@@ -94,6 +123,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;
 }
diff --git a/drivers/power/twl6035.c b/drivers/power/twl6035.c
index 978a7ad..878117e 100644
--- a/drivers/power/twl6035.c
+++ b/drivers/power/twl6035.c
@@ -51,4 +51,18 @@  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;
+}
 #endif
diff --git a/include/twl6035.h b/include/twl6035.h
index 1e13317..e21ddba 100644
--- a/include/twl6035.h
+++ b/include/twl6035.h
@@ -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);