summaryrefslogtreecommitdiff
path: root/firmware/target/arm
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-03-14 21:46:25 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-03-14 21:46:25 +0000
commitc3c73060989e2f8f9244bdb47d20c24d28153a62 (patch)
tree43068b33345e37c7712fd570e50d28115e1e2242 /firmware/target/arm
parentdb7aedf93ae18a316bda25a5de4b0eca6eb5ad43 (diff)
sd-as3525: do not reverse 2 times long responses, read them directly in the needed order
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25185 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm')
-rw-r--r--firmware/target/arm/as3525/sd-as3525.c25
1 files changed, 7 insertions, 18 deletions
diff --git a/firmware/target/arm/as3525/sd-as3525.c b/firmware/target/arm/as3525/sd-as3525.c
index 0afe735e53..5ccb659e00 100644
--- a/firmware/target/arm/as3525/sd-as3525.c
+++ b/firmware/target/arm/as3525/sd-as3525.c
@@ -241,15 +241,13 @@ static bool send_cmd(const int drive, const int cmd, const int arg,
if(status & MCI_RESPONSE_ERROR) /* timeout or crc failure */
return false;
- if(status & MCI_CMD_RESP_END) /*Response passed CRC check */
+ if(status & MCI_CMD_RESP_END) /* Response passed CRC check */
{
if(flags & MCI_LONG_RESP)
- { /* replace short response with long response */
- /* store the response in reverse words order */
- response[0] = MCI_RESP3(drive);
- response[1] = MCI_RESP2(drive);
- response[2] = MCI_RESP1(drive);
- response[3] = MCI_RESP0(drive);
+ { /* response[0] has already been read */
+ response[1] = MCI_RESP1(drive);
+ response[2] = MCI_RESP2(drive);
+ response[3] = MCI_RESP3(drive);
}
return true;
}
@@ -270,9 +268,6 @@ static int sd_init_card(const int drive)
unsigned long response;
long init_timeout;
bool sd_v2 = false;
- unsigned long temp_reg[4];
- int i;
-
/* MCLCK on and set to 400kHz ident frequency */
MCI_CLOCK(drive) = MCI_IDENTSPEED;
@@ -310,12 +305,9 @@ static int sd_init_card(const int drive)
/* CMD2 send CID */
if(!send_cmd(drive, SD_ALL_SEND_CID, 0, MCI_RESP|MCI_LONG_RESP|MCI_ARG,
- temp_reg))
+ card_info[drive].cid))
return -3;
- for(i=0; i<4; i++)
- card_info[drive].cid[3-i] = temp_reg[i];
-
/* CMD3 send RCA */
if(!send_cmd(drive, SD_SEND_RELATIVE_ADDR, 0, MCI_RESP|MCI_ARG,
&card_info[drive].rca))
@@ -350,12 +342,9 @@ static int sd_init_card(const int drive)
/* CMD9 send CSD */
if(!send_cmd(drive, SD_SEND_CSD, card_info[drive].rca,
- MCI_RESP|MCI_LONG_RESP|MCI_ARG, temp_reg))
+ MCI_RESP|MCI_LONG_RESP|MCI_ARG, card_info[drive].csd))
return -9;
- for(i=0; i<4; i++)
- card_info[drive].csd[3-i] = temp_reg[i];
-
sd_parse_csd(&card_info[drive]);
#if defined(HAVE_MULTIDRIVE)