|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|