summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/imx233/sdmmc-imx233.c21
1 files changed, 21 insertions, 0 deletions
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)
530 window_start[drive] = 0; 530 window_start[drive] = 0;
531 window_end[drive] = *sec_count; 531 window_end[drive] = *sec_count;
532 } 532 }
533 /* deselect card */
534 if(!send_cmd(drive, MMC_DESELECT_CARD, 0, MCI_NO_RESP, NULL))
535 return -13;
533 536
534 /* MMC always support CMD23 */ 537 /* MMC always support CMD23 */
535 support_set_block_count[drive] = false; 538 support_set_block_count[drive] = false;
@@ -608,6 +611,18 @@ static int transfer_sectors(int drive, unsigned long start, int count, void *buf
608 ret = -201; 611 ret = -201;
609 goto Lend; 612 goto Lend;
610 } 613 }
614 /* select card.
615 * NOTE: rely on SD_SELECT_CARD=MMC_SELECT_CARD */
616 if(!send_cmd(drive, SD_SELECT_CARD, SDMMC_RCA(drive), MCI_NO_RESP, NULL))
617 {
618 ret = -20;
619 goto Lend;
620 }
621 /* wait for TRAN state */
622 /* NOTE: rely on SD_TRAN=MMC_TRAN */
623 ret = wait_for_state(drive, SD_TRAN);
624 if(ret < 0)
625 goto Ldeselect;
611 626
612 /** 627 /**
613 * NOTE: we need to make sure dma transfers are aligned. This is handled 628 * 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
664 else 679 else
665 ret = __xfer_sectors(drive, start, count, buf, read); 680 ret = __xfer_sectors(drive, start, count, buf, read);
666 } 681 }
682 /* deselect card */
683 Ldeselect:
684 /* CMD7 w/rca =0 : deselects card & puts it in STBY state
685 * NOTE: rely on SD_DESELECT_CARD=MMC_DESELECT_CARD */
686 if(!send_cmd(drive, SD_DESELECT_CARD, 0, MCI_NO_RESP, NULL))
687 ret = -23;
667 Lend: 688 Lend:
668 /* update led status */ 689 /* update led status */
669 led(false); 690 led(false);