diff options
| author | Jonathan Solnit <jsolnit@gmail.com> | 2012-02-24 11:30:18 +0000 | 
|---|---|---|
| committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2012-05-15 08:31:22 +0200 | 
| commit | bbbc1ae9219ae8c8098c0af14060da5cb0d37e53 (patch) | |
| tree | 57ff74a970a4fdecd67268e9fa64aadbd41493d6 /drivers/mmc | |
| parent | 1d0f5fa11d8b21b010ca5ee0cb2a3e921345afc4 (diff) | |
| download | olio-uboot-2014.01-bbbc1ae9219ae8c8098c0af14060da5cb0d37e53.tar.xz olio-uboot-2014.01-bbbc1ae9219ae8c8098c0af14060da5cb0d37e53.zip | |
ARM:OMAP+:MMC: Add parameters to MMC init
Add parameters to the OMAP MMC initialization function so the board can
mask host capabilities and set the maximum clock frequency.  While the
OMAP supports a certain set of MMC host capabilities, individual boards
may be more restricted and the OMAP may need to be configured to match
the board.  The PRG_SDMMC1_SPEEDCTRL bit in the OMAP3 is an example.
Signed-off-by: Jonathan Solnit <jsolnit@gmail.com>
Diffstat (limited to 'drivers/mmc')
| -rw-r--r-- | drivers/mmc/omap_hsmmc.c | 24 | 
1 files changed, 20 insertions, 4 deletions
| diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c index 2400db2f3..b8ab7bc3d 100644 --- a/drivers/mmc/omap_hsmmc.c +++ b/drivers/mmc/omap_hsmmc.c @@ -80,6 +80,11 @@ unsigned char mmc_board_init(struct mmc *mmc)  	writel(readl(&t2_base->devconf1) | MMCSDIO2ADPCLKISEL,  		&t2_base->devconf1); +	/* Change from default of 52MHz to 26MHz if necessary */ +	if (!(mmc->host_caps & MMC_MODE_HS_52MHz)) +		writel(readl(&t2_base->ctl_prog_io1) & ~CTLPROGIO1SPEEDCTRL, +			&t2_base->ctl_prog_io1); +  	writel(readl(&prcm_base->fclken1_core) |  		EN_MMC1 | EN_MMC2 | EN_MMC3,  		&prcm_base->fclken1_core); @@ -463,7 +468,7 @@ static void mmc_set_ios(struct mmc *mmc)  	writel(readl(&mmc_base->sysctl) | CEN_ENABLE, &mmc_base->sysctl);  } -int omap_mmc_init(int dev_index) +int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max)  {  	struct mmc *mmc; @@ -494,11 +499,22 @@ int omap_mmc_init(int dev_index)  		return 1;  	}  	mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195; -	mmc->host_caps = MMC_MODE_4BIT | MMC_MODE_HS_52MHz | MMC_MODE_HS | -				MMC_MODE_HC; +	mmc->host_caps = (MMC_MODE_4BIT | MMC_MODE_HS_52MHz | MMC_MODE_HS | +				MMC_MODE_HC) & ~host_caps_mask;  	mmc->f_min = 400000; -	mmc->f_max = 52000000; + +	if (f_max != 0) +		mmc->f_max = f_max; +	else { +		if (mmc->host_caps & MMC_MODE_HS) { +			if (mmc->host_caps & MMC_MODE_HS_52MHz) +				mmc->f_max = 52000000; +			else +				mmc->f_max = 26000000; +		} else +			mmc->f_max = 20000000; +	}  	mmc->b_max = 0; |