From 08641941bbe3e1bf3088a6e7da71176bb25ae69f Mon Sep 17 00:00:00 2001 From: Jack Halpin Date: Wed, 5 May 2010 04:35:08 +0000 Subject: 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 --- firmware/target/arm/as3525/sd-as3525v2.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'firmware') 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) sd_parse_csd(&card_info[drive]); - -#ifndef HAVE_MULTIDRIVE /* CMD7 w/rca: Select card to put it in TRAN state */ if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_NO_RESP, NULL)) return -12; + +#ifndef BOOTLOADER + /* Switch to to 4 bit widebus mode */ + if(sd_wait_for_state(drive, SD_TRAN) < 0) + return -13; + /* CMD55 */ + if(!send_cmd(drive, SD_APP_CMD, card_info[drive].rca, MCI_NO_RESP, NULL)) + return -14; + /* ACMD6 */ + if(!send_cmd(drive, SD_SET_BUS_WIDTH, 2, MCI_NO_RESP, NULL)) + return -15; + mci_delay(); + /* CMD55 */ + if(!send_cmd(drive, SD_APP_CMD, card_info[drive].rca, MCI_NO_RESP, NULL)) + return -16; + /* ACMD42 */ + if(!send_cmd(drive, SD_SET_CLR_CARD_DETECT, 0, MCI_NO_RESP, NULL)) + return -17; + /* Now that card is widebus make controller aware */ + MCI_CTYPE |= (1<