diff options
author | Jack Halpin <jack.halpin@gmail.com> | 2010-03-24 05:41:33 +0000 |
---|---|---|
committer | Jack Halpin <jack.halpin@gmail.com> | 2010-03-24 05:41:33 +0000 |
commit | 9d9c090cbafb68268e492be299a017a02168b0b1 (patch) | |
tree | c1b5a886a33b653217d50cda345e9f4d44585db5 /firmware/target | |
parent | 0466a110287b7133e4a3ea60ee68ed009a9e4079 (diff) | |
download | rockbox-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')
-rw-r--r-- | firmware/target/arm/as3525/sd-as3525v2.c | 23 |
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 | |||
318 | static unsigned char *uncached_buffer = UNCACHED_ADDR(&aligned_buffer[0]); | 318 | static unsigned char *uncached_buffer = UNCACHED_ADDR(&aligned_buffer[0]); |
319 | 319 | ||
320 | static void init_controller(void); | 320 | static void init_controller(void); |
321 | static int sd_wait_for_state(const int drive, unsigned int state); | ||
321 | 322 | ||
322 | static tCardInfo card_info[NUM_DRIVES]; | 323 | static 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; |