summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/sd-as3525v2.c
diff options
context:
space:
mode:
authorJack Halpin <jack.halpin@gmail.com>2010-03-24 05:41:33 +0000
committerJack Halpin <jack.halpin@gmail.com>2010-03-24 05:41:33 +0000
commit9d9c090cbafb68268e492be299a017a02168b0b1 (patch)
treec1b5a886a33b653217d50cda345e9f4d44585db5 /firmware/target/arm/as3525/sd-as3525v2.c
parent0466a110287b7133e4a3ea60ee68ed009a9e4079 (diff)
downloadrockbox-9d9c090cbafb68268e492be299a017a02168b0b1.tar.gz
rockbox-9d9c090cbafb68268e492be299a017a02168b0b1.zip
sd-as3525v2.c Implement HS timings for those cards that are capable.bootloader_sansaclipv2_sansaclipplus_v1
The internal card does not appear to be HS capable, at least not in 2GB clip+ git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25316 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/as3525/sd-as3525v2.c')
-rw-r--r--firmware/target/arm/as3525/sd-as3525v2.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c
index 5db63eef10..273507c495 100644
--- a/firmware/target/arm/as3525/sd-as3525v2.c
+++ b/firmware/target/arm/as3525/sd-as3525v2.c
@@ -318,6 +318,7 @@ static unsigned char aligned_buffer[UNALIGNED_NUM_SECTORS* SD_BLOCK_SIZE] __attr
318static unsigned char *uncached_buffer = UNCACHED_ADDR(&aligned_buffer[0]); 318static unsigned char *uncached_buffer = UNCACHED_ADDR(&aligned_buffer[0]);
319 319
320static void init_controller(void); 320static void init_controller(void);
321static int sd_wait_for_state(const int drive, unsigned int state);
321 322
322static tCardInfo card_info[NUM_DRIVES]; 323static tCardInfo card_info[NUM_DRIVES];
323 324
@@ -487,10 +488,28 @@ static int sd_init_card(const int drive)
487#endif 488#endif
488 /* End of Card Identification Mode ************************************/ 489 /* End of Card Identification Mode ************************************/
489 490
491 /* Attempt to switch cards to HS timings, non HS cards just ignore this */
492 /* CMD7 w/rca: Select card to put it in TRAN state */
493 if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_RESP, &response))
494 return -7;
495
496 if(sd_wait_for_state(drive, SD_TRAN))
497 return -8;
498
499 /* CMD6 */
500 if(!send_cmd(drive, SD_SWITCH_FUNC, 0x80fffff1, MCI_NO_RESP, NULL))
501 return -9;
502 mci_delay();
503
504 /* We need to go back to STBY state now so we can read csd */
505 /* CMD7 w/rca=0: Deselect card to put it in STBY state */
506 if(!send_cmd(drive, SD_DESELECT_CARD, 0, MCI_RESP, &response))
507 return -10;
508
490 /* CMD9 send CSD */ 509 /* CMD9 send CSD */
491 if(!send_cmd(drive, SD_SEND_CSD, card_info[drive].rca, 510 if(!send_cmd(drive, SD_SEND_CSD, card_info[drive].rca,
492 MCI_RESP|MCI_LONG_RESP, card_info[drive].csd)) 511 MCI_RESP|MCI_LONG_RESP, card_info[drive].csd))
493 return -7; 512 return -11;
494 513
495 sd_parse_csd(&card_info[drive]); 514 sd_parse_csd(&card_info[drive]);
496 515
@@ -500,7 +519,7 @@ static int sd_init_card(const int drive)
500#ifndef HAVE_MULTIDRIVE 519#ifndef HAVE_MULTIDRIVE
501 /* CMD7 w/rca: Select card to put it in TRAN state */ 520 /* CMD7 w/rca: Select card to put it in TRAN state */
502 if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_NO_RESP, NULL)) 521 if(!send_cmd(drive, SD_SELECT_CARD, card_info[drive].rca, MCI_NO_RESP, NULL))
503 return -8; 522 return -12;
504#endif 523#endif
505 524
506 card_info[drive].initialized = 1; 525 card_info[drive].initialized = 1;