|
@@ -28,6 +28,7 @@
|
|
#include <part.h>
|
|
#include <part.h>
|
|
#include <i2c.h>
|
|
#include <i2c.h>
|
|
#include <twl4030.h>
|
|
#include <twl4030.h>
|
|
|
|
+#include <twl6030.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>
|
|
@@ -38,7 +39,27 @@
|
|
static int mmc_read_data(hsmmc_t *mmc_base, char *buf, unsigned int size);
|
|
static int mmc_read_data(hsmmc_t *mmc_base, char *buf, unsigned int size);
|
|
static int mmc_write_data(hsmmc_t *mmc_base, const char *buf, unsigned int siz);
|
|
static int mmc_write_data(hsmmc_t *mmc_base, const char *buf, unsigned int siz);
|
|
static struct mmc hsmmc_dev[2];
|
|
static struct mmc hsmmc_dev[2];
|
|
-unsigned char mmc_board_init(hsmmc_t *mmc_base)
|
|
|
|
|
|
+
|
|
|
|
+#if defined(CONFIG_OMAP44XX) && defined(CONFIG_TWL6030_POWER)
|
|
|
|
+static void omap4_vmmc_pbias_config(struct mmc *mmc)
|
|
|
|
+{
|
|
|
|
+ u32 value = 0;
|
|
|
|
+ struct omap4_sys_ctrl_regs *const ctrl =
|
|
|
|
+ (struct omap4_sys_ctrl_regs *)SYSCTRL_GENERAL_CORE_BASE;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ value = readl(&ctrl->control_pbiaslite);
|
|
|
|
+ value &= ~(MMC1_PBIASLITE_PWRDNZ | MMC1_PWRDNZ);
|
|
|
|
+ writel(value, &ctrl->control_pbiaslite);
|
|
|
|
+ /* set VMMC to 3V */
|
|
|
|
+ twl6030_power_mmc_init();
|
|
|
|
+ value = readl(&ctrl->control_pbiaslite);
|
|
|
|
+ value |= MMC1_PBIASLITE_VMODE | MMC1_PBIASLITE_PWRDNZ | MMC1_PWRDNZ;
|
|
|
|
+ writel(value, &ctrl->control_pbiaslite);
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+unsigned char mmc_board_init(struct mmc *mmc)
|
|
{
|
|
{
|
|
#if defined(CONFIG_TWL4030_POWER)
|
|
#if defined(CONFIG_TWL4030_POWER)
|
|
twl4030_power_mmc_init();
|
|
twl4030_power_mmc_init();
|
|
@@ -67,7 +88,11 @@ unsigned char mmc_board_init(hsmmc_t *mmc_base)
|
|
&prcm_base->iclken1_core);
|
|
&prcm_base->iclken1_core);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-/* TODO add appropriate OMAP4 init - none currently necessary */
|
|
|
|
|
|
+#if defined(CONFIG_OMAP44XX) && defined(CONFIG_TWL6030_POWER)
|
|
|
|
+ /* PBIAS config needed for MMC1 only */
|
|
|
|
+ if (mmc->block_dev.dev == 0)
|
|
|
|
+ omap4_vmmc_pbias_config(mmc);
|
|
|
|
+#endif
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -108,7 +133,7 @@ static int mmc_init_setup(struct mmc *mmc)
|
|
unsigned int dsor;
|
|
unsigned int dsor;
|
|
ulong start;
|
|
ulong start;
|
|
|
|
|
|
- mmc_board_init(mmc_base);
|
|
|
|
|
|
+ mmc_board_init(mmc);
|
|
|
|
|
|
writel(readl(&mmc_base->sysconfig) | MMC_SOFTRESET,
|
|
writel(readl(&mmc_base->sysconfig) | MMC_SOFTRESET,
|
|
&mmc_base->sysconfig);
|
|
&mmc_base->sysconfig);
|