summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorJack Halpin <jack.halpin@gmail.com>2010-05-05 04:35:08 +0000
committerJack Halpin <jack.halpin@gmail.com>2010-05-05 04:35:08 +0000
commit08641941bbe3e1bf3088a6e7da71176bb25ae69f (patch)
tree58b4ba292b816a51e01c83d7c2c43708c628dff1 /firmware
parent145135f99f9453af8593c8a9e1cae8556abde3de (diff)
downloadrockbox-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')
-rw-r--r--firmware/target/arm/as3525/sd-as3525v2.c30
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);