diff options
author | Jack Halpin <jack.halpin@gmail.com> | 2010-05-05 04:35:08 +0000 |
---|---|---|
committer | Jack Halpin <jack.halpin@gmail.com> | 2010-05-05 04:35:08 +0000 |
commit | 08641941bbe3e1bf3088a6e7da71176bb25ae69f (patch) | |
tree | 58b4ba292b816a51e01c83d7c2c43708c628dff1 /firmware/target/arm | |
parent | 145135f99f9453af8593c8a9e1cae8556abde3de (diff) | |
download | rockbox-08641941bbe3e1bf3088a6e7da71176bb25ae69f.tar.gz rockbox-08641941bbe3e1bf3088a6e7da71176bb25ae69f.zip |
sd-as3525v2.c: Implement 4 bit widebus for SD Transfers.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25820 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/as3525/sd-as3525v2.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c index 0886753f61..754b6fa5e2 100644 --- a/firmware/target/arm/as3525/sd-as3525v2.c +++ b/firmware/target/arm/as3525/sd-as3525v2.c | |||
@@ -534,11 +534,29 @@ static int sd_init_card(const int drive) | |||
534 | 534 | ||
535 | sd_parse_csd(&card_info[drive]); | 535 | sd_parse_csd(&card_info[drive]); |
536 | 536 | ||
537 | |||
538 | #ifndef HAVE_MULTIDRIVE | ||
539 | /* CMD7 w/rca: Select card to put it in TRAN state */ | 537 | /* CMD7 w/rca: Select card to put it in TRAN state */ |
540 | if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_NO_RESP, NULL)) | 538 | if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_NO_RESP, NULL)) |
541 | return -12; | 539 | return -12; |
540 | |||
541 | #ifndef BOOTLOADER | ||
542 | /* Switch to to 4 bit widebus mode */ | ||
543 | if(sd_wait_for_state(drive, SD_TRAN) < 0) | ||
544 | return -13; | ||
545 | /* CMD55 */ | ||
546 | if(!send_cmd(drive, SD_APP_CMD, card_info[drive].rca, MCI_NO_RESP, NULL)) | ||
547 | return -14; | ||
548 | /* ACMD6 */ | ||
549 | if(!send_cmd(drive, SD_SET_BUS_WIDTH, 2, MCI_NO_RESP, NULL)) | ||
550 | return -15; | ||
551 | mci_delay(); | ||
552 | /* CMD55 */ | ||
553 | if(!send_cmd(drive, SD_APP_CMD, card_info[drive].rca, MCI_NO_RESP, NULL)) | ||
554 | return -16; | ||
555 | /* ACMD42 */ | ||
556 | if(!send_cmd(drive, SD_SET_CLR_CARD_DETECT, 0, MCI_NO_RESP, NULL)) | ||
557 | return -17; | ||
558 | /* Now that card is widebus make controller aware */ | ||
559 | MCI_CTYPE |= (1<<drive); | ||
542 | #endif | 560 | #endif |
543 | 561 | ||
544 | card_info[drive].initialized = 1; | 562 | card_info[drive].initialized = 1; |
@@ -783,11 +801,9 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start, | |||
783 | } | 801 | } |
784 | } | 802 | } |
785 | 803 | ||
786 | #ifdef HAVE_MULTIDRIVE | ||
787 | /* CMD7 w/rca: Select card to put it in TRAN state */ | 804 | /* CMD7 w/rca: Select card to put it in TRAN state */ |
788 | if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_NO_RESP, NULL)) | 805 | if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_NO_RESP, NULL)) |
789 | return -13; | 806 | return -18; |
790 | #endif | ||
791 | 807 | ||
792 | last_disk_activity = current_tick; | 808 | last_disk_activity = current_tick; |
793 | dma_retain(); | 809 | dma_retain(); |
@@ -875,12 +891,10 @@ static int sd_transfer_sectors(IF_MD2(int drive,) unsigned long start, | |||
875 | 891 | ||
876 | dma_release(); | 892 | dma_release(); |
877 | 893 | ||
878 | #ifdef HAVE_MULTIDRIVE | ||
879 | /* CMD lines are separate, not common, so we need to actively deselect */ | 894 | /* CMD lines are separate, not common, so we need to actively deselect */ |
880 | /* CMD7 w/rca =0 : deselects card & puts it in STBY state */ | 895 | /* CMD7 w/rca =0 : deselects card & puts it in STBY state */ |
881 | if(!send_cmd(drive, SD_DESELECT_CARD, 0, MCI_NO_RESP, NULL)) | 896 | if(!send_cmd(drive, SD_DESELECT_CARD, 0, MCI_NO_RESP, NULL)) |
882 | return -14; | 897 | return -19; |
883 | #endif | ||
884 | 898 | ||
885 | #ifndef BOOTLOADER | 899 | #ifndef BOOTLOADER |
886 | sd_enable(false); | 900 | sd_enable(false); |