omap5: pbias ldo9 turn on
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>
This commit is contained in:
		
							parent
							
								
									2114429896
								
							
						
					
					
						commit
						dd23e59d59
					
				|  | @ -125,9 +125,10 @@ | ||||||
| /* CONTROL_EFUSE_2 */ | /* CONTROL_EFUSE_2 */ | ||||||
| #define CONTROL_EFUSE_2_NMOS_PMOS_PTV_CODE_1		0x00ffc000 | #define CONTROL_EFUSE_2_NMOS_PMOS_PTV_CODE_1		0x00ffc000 | ||||||
| 
 | 
 | ||||||
| #define MMC1_PWRDNZ					(1 << 26) | #define SDCARD_PWRDNZ					(1 << 26) | ||||||
| #define MMC1_PBIASLITE_PWRDNZ				(1 << 22) | #define SDCARD_BIAS_HIZ_MODE				(1 << 25) | ||||||
| #define MMC1_PBIASLITE_VMODE				(1 << 21) | #define SDCARD_BIAS_PWRDNZ				(1 << 22) | ||||||
|  | #define SDCARD_PBIASLITE_VMODE				(1 << 21) | ||||||
| 
 | 
 | ||||||
| #ifndef __ASSEMBLY__ | #ifndef __ASSEMBLY__ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -29,6 +29,7 @@ | ||||||
| #include <i2c.h> | #include <i2c.h> | ||||||
| #include <twl4030.h> | #include <twl4030.h> | ||||||
| #include <twl6030.h> | #include <twl6030.h> | ||||||
|  | #include <twl6035.h> | ||||||
| #include <asm/io.h> | #include <asm/io.h> | ||||||
| #include <asm/arch/mmc_host_def.h> | #include <asm/arch/mmc_host_def.h> | ||||||
| #include <asm/arch/sys_proto.h> | #include <asm/arch/sys_proto.h> | ||||||
|  | @ -60,6 +61,34 @@ static void omap4_vmmc_pbias_config(struct mmc *mmc) | ||||||
| } | } | ||||||
| #endif | #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) | unsigned char mmc_board_init(struct mmc *mmc) | ||||||
| { | { | ||||||
| #if defined(CONFIG_TWL4030_POWER) | #if defined(CONFIG_TWL4030_POWER) | ||||||
|  | @ -99,6 +128,10 @@ unsigned char mmc_board_init(struct mmc *mmc) | ||||||
| 	if (mmc->block_dev.dev == 0) | 	if (mmc->block_dev.dev == 0) | ||||||
| 		omap4_vmmc_pbias_config(mmc); | 		omap4_vmmc_pbias_config(mmc); | ||||||
| #endif | #endif | ||||||
|  | #if defined(CONFIG_OMAP54XX) && defined(CONFIG_TWL6035_POWER) | ||||||
|  | 	if (mmc->block_dev.dev == 0) | ||||||
|  | 		omap5_pbias_config(mmc); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -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); | 	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) | void twl6035_init_settings(void) | ||||||
| { | { | ||||||
| 	return; | 	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; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -39,3 +39,4 @@ | ||||||
| int twl6035_i2c_write_u8(u8 chip_no, u8 val, u8 reg); | int twl6035_i2c_write_u8(u8 chip_no, u8 val, u8 reg); | ||||||
| int twl6035_i2c_read_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_init_settings(void); | ||||||
|  | void twl6035_mmc1_poweron_ldo(void); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue