diff options
| author | Tom Rini <trini@ti.com> | 2014-01-09 11:05:32 -0500 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2014-01-09 11:05:32 -0500 | 
| commit | 8401bfa91ef57e331e2a3abdf768d41803bec88e (patch) | |
| tree | 144e43bb5db26b33fcbadbb52d80760af2f70d04 /drivers/mmc/mmc.c | |
| parent | 33d413fc91e0bbbb92962a80f5333d6f1f628c5b (diff) | |
| parent | c5c1af21764d9423b45c1d03e835c4547a8bc5cb (diff) | |
| download | olio-uboot-2014.01-8401bfa91ef57e331e2a3abdf768d41803bec88e.tar.xz olio-uboot-2014.01-8401bfa91ef57e331e2a3abdf768d41803bec88e.zip | |
Merge branch 'master' of git://git.denx.de/u-boot-mmc
Diffstat (limited to 'drivers/mmc/mmc.c')
| -rw-r--r-- | drivers/mmc/mmc.c | 18 | 
1 files changed, 18 insertions, 0 deletions
| diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index e1461a98d..c6a1c23fb 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -877,6 +877,7 @@ static int mmc_startup(struct mmc *mmc)  	mmc->tran_speed = freq * mult; +	mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);  	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);  	if (IS_SD(mmc)) @@ -907,6 +908,14 @@ static int mmc_startup(struct mmc *mmc)  	if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)  		mmc->write_bl_len = MMC_MAX_BLOCK_LEN; +	if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) { +		cmd.cmdidx = MMC_CMD_SET_DSR; +		cmd.cmdarg = (mmc->dsr & 0xffff) << 16; +		cmd.resp_type = MMC_RSP_NONE; +		if (mmc_send_cmd(mmc, &cmd, NULL)) +			printf("MMC: SET_DSR failed\n"); +	} +  	/* Select the card, and put it into Transfer Mode */  	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */  		cmd.cmdidx = MMC_CMD_SELECT_CARD; @@ -1163,6 +1172,9 @@ static int mmc_send_if_cond(struct mmc *mmc)  int mmc_register(struct mmc *mmc)  { +	/* Setup dsr related values */ +	mmc->dsr_imp = 0; +	mmc->dsr = 0xffffffff;  	/* Setup the universal parts of the block interface just once */  	mmc->block_dev.if_type = IF_TYPE_MMC;  	mmc->block_dev.dev = cur_dev_num++; @@ -1280,6 +1292,12 @@ int mmc_init(struct mmc *mmc)  	return err;  } +int mmc_set_dsr(struct mmc *mmc, u16 val) +{ +	mmc->dsr = val; +	return 0; +} +  /*   * CPU and board-specific MMC initializations.  Aliased function   * signals caller to move on |