[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rockbox-cvs
Subject:    Revert "imx233: always keep cards in TRAN mode"
From:       gerrit () rockbox ! org
Date:       2013-11-30 16:18:18
Message-ID: 201311301618.rAUGIIYR016942 () giant ! haxx ! se
[Download RAW message or body]

commit 2ce484c658d195d245987a63ac11e61992429867
Author: Amaury Pouly <amaury.pouly@gmail.com>
Date:   Wed Nov 27 19:34:50 2013 +0000

    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

diff --git a/firmware/target/arm/imx233/sdmmc-imx233.c b/firmware/target/arm/imx233/sdmmc-imx233.c
index a435b14..b43d3b2 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);
_______________________________________________
rockbox-cvs mailing list
rockbox-cvs@cool.haxx.se
http://cool.haxx.se/cgi-bin/mailman/listinfo/rockbox-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic