From 2ce484c658d195d245987a63ac11e61992429867 Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Wed, 27 Nov 2013 19:34:50 +0000 Subject: Revert "imx233: always keep cards in TRAN mode" This reverts commit 462adf2a0fefbfdbccfafa11c999ac6beb114e8a. Leaving the card in TRAN results in a huge power consumption because some cards and internal bridges do not automatically enter power saving mode in TRAN state. Change-Id: If79efe8cf99b24174889b3a5ebbcb51b07085f58 --- firmware/target/arm/imx233/sdmmc-imx233.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/firmware/target/arm/imx233/sdmmc-imx233.c b/firmware/target/arm/imx233/sdmmc-imx233.c index a435b149f2..b43d3b237b 100644 --- a/firmware/target/arm/imx233/sdmmc-imx233.c +++ b/firmware/target/arm/imx233/sdmmc-imx233.c @@ -530,6 +530,9 @@ static int init_mmc_drive(int drive) window_start[drive] = 0; window_end[drive] = *sec_count; } + /* deselect card */ + if(!send_cmd(drive, MMC_DESELECT_CARD, 0, MCI_NO_RESP, NULL)) + return -13; /* MMC always support CMD23 */ support_set_block_count[drive] = false; @@ -608,6 +611,18 @@ static int transfer_sectors(int drive, unsigned long start, int count, void *buf ret = -201; goto Lend; } + /* select card. + * NOTE: rely on SD_SELECT_CARD=MMC_SELECT_CARD */ + if(!send_cmd(drive, SD_SELECT_CARD, SDMMC_RCA(drive), MCI_NO_RESP, NULL)) + { + ret = -20; + goto Lend; + } + /* wait for TRAN state */ + /* NOTE: rely on SD_TRAN=MMC_TRAN */ + ret = wait_for_state(drive, SD_TRAN); + if(ret < 0) + goto Ldeselect; /** * NOTE: we need to make sure dma transfers are aligned. This is handled @@ -664,6 +679,12 @@ static int transfer_sectors(int drive, unsigned long start, int count, void *buf else ret = __xfer_sectors(drive, start, count, buf, read); } + /* deselect card */ + Ldeselect: + /* CMD7 w/rca =0 : deselects card & puts it in STBY state + * NOTE: rely on SD_DESELECT_CARD=MMC_DESELECT_CARD */ + if(!send_cmd(drive, SD_DESELECT_CARD, 0, MCI_NO_RESP, NULL)) + ret = -23; Lend: /* update led status */ led(false); -- cgit v1.2.3