diff options
Diffstat (limited to 'drivers/mmc/omap3_mmc.c')
| -rw-r--r-- | drivers/mmc/omap3_mmc.c | 50 | 
1 files changed, 45 insertions, 5 deletions
diff --git a/drivers/mmc/omap3_mmc.c b/drivers/mmc/omap3_mmc.c index 96c0e653b..9506cca21 100644 --- a/drivers/mmc/omap3_mmc.c +++ b/drivers/mmc/omap3_mmc.c @@ -30,7 +30,8 @@  #include <i2c.h>  #include <twl4030.h>  #include <asm/io.h> -#include <asm/arch/mmc.h> + +#include "omap3_mmc.h"  const unsigned short mmc_transspeed_val[15][4] = {  	{CLKD(10, 1), CLKD(10, 10), CLKD(10, 100), CLKD(10, 1000)}, @@ -52,7 +53,27 @@ const unsigned short mmc_transspeed_val[15][4] = {  mmc_card_data cur_card_data;  static block_dev_desc_t mmc_blk_dev; -static hsmmc_t *mmc_base = (hsmmc_t *)OMAP_HSMMC_BASE; +static hsmmc_t *mmc_base = (hsmmc_t *)OMAP_HSMMC1_BASE; + +int mmc_set_dev(int dev_num) +{ +	switch (dev_num) { +	case 1: +		mmc_base = (hsmmc_t *)OMAP_HSMMC1_BASE; +		break; +	case 2: +		mmc_base = (hsmmc_t *)OMAP_HSMMC2_BASE; +		break; +	case 3: +		mmc_base = (hsmmc_t *)OMAP_HSMMC3_BASE; +		break; +	default: +		mmc_base = (hsmmc_t *)OMAP_HSMMC1_BASE; +		return 1; +	} + +	return 0; +}  block_dev_desc_t *mmc_get_dev(int dev)  { @@ -61,12 +82,14 @@ block_dev_desc_t *mmc_get_dev(int dev)  unsigned char mmc_board_init(void)  { -	t2_t *t2_base = (t2_t *)T2_BASE; -  #if defined(CONFIG_TWL4030_POWER)  	twl4030_power_mmc_init();  #endif +#if defined(CONFIG_OMAP34XX) +	t2_t *t2_base = (t2_t *)T2_BASE; +	struct prcm *prcm_base = (struct prcm *)PRCM_BASE; +  	writel(readl(&t2_base->pbias_lite) | PBIASLITEPWRDNZ1 |  		PBIASSPEEDCTRL0 | PBIASLITEPWRDNZ0,  		&t2_base->pbias_lite); @@ -74,6 +97,20 @@ unsigned char mmc_board_init(void)  	writel(readl(&t2_base->devconf0) | MMCSDIO1ADPCLKISEL,  		&t2_base->devconf0); +	writel(readl(&t2_base->devconf1) | MMCSDIO2ADPCLKISEL, +		&t2_base->devconf1); + +	writel(readl(&prcm_base->fclken1_core) | +		EN_MMC1 | EN_MMC2 | EN_MMC3, +		&prcm_base->fclken1_core); + +	writel(readl(&prcm_base->iclken1_core) | +		EN_MMC1 | EN_MMC2 | EN_MMC3, +		&prcm_base->iclken1_core); +#endif + +/* TODO add appropriate OMAP4 init */ +  	return 1;  } @@ -512,8 +549,11 @@ unsigned long mmc_bread(int dev_num, unsigned long blknr, lbaint_t blkcnt,  	return 1;  } -int mmc_legacy_init(int verbose) +int mmc_legacy_init(int dev)  { +	if (mmc_set_dev(dev) != 0) +		return 1; +  	if (configure_mmc(&cur_card_data) != 1)  		return 1;  |