diff options
author | Jack Halpin <jack.halpin@gmail.com> | 2009-12-03 17:22:03 +0000 |
---|---|---|
committer | Jack Halpin <jack.halpin@gmail.com> | 2009-12-03 17:22:03 +0000 |
commit | 40629be046f8772d404ec5577be2452f5c516ef6 (patch) | |
tree | ac4b77140dbd32fced1edc8dc29d2f9c98d57a2f /firmware/target/arm/as3525 | |
parent | d8f420a48d9d0a9057dfb5760b877568f2e52538 (diff) | |
download | rockbox-40629be046f8772d404ec5577be2452f5c516ef6.tar.gz rockbox-40629be046f8772d404ec5577be2452f5c516ef6.zip |
Sansa AMS: Wait until sd_init_card() to turn on the clocks for the pl180 controller.
Currently the bypass bit is not cleared so it's possible to enter the identification phase at bypass speed instead of ident speed.
The simplest solution to ensure the bypass bit is not set is to set the register with an = operation instead of |=.
This makes setting the MCI_CLOCK register at the end of the controller init unnecessary.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23830 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/as3525')
-rw-r--r-- | firmware/target/arm/as3525/ata_sd_as3525.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/firmware/target/arm/as3525/ata_sd_as3525.c b/firmware/target/arm/as3525/ata_sd_as3525.c index f9a875974d..961a124df3 100644 --- a/firmware/target/arm/as3525/ata_sd_as3525.c +++ b/firmware/target/arm/as3525/ata_sd_as3525.c | |||
@@ -257,13 +257,12 @@ static int sd_init_card(const int drive) | |||
257 | int i; | 257 | int i; |
258 | 258 | ||
259 | 259 | ||
260 | /* 100 - 400kHz clock required for Identification Mode */ | 260 | /* MCLCK on and set to 400kHz ident frequency */ |
261 | MCI_CLOCK(drive) = (MCI_CLOCK(drive) & 0xf00) | AS3525_SD_IDENT_DIV; | 261 | MCI_CLOCK(drive) = MCI_CLOCK_ENABLE | AS3525_SD_IDENT_DIV; |
262 | |||
263 | 262 | ||
263 | /* 100 - 400kHz clock required for Identification Mode */ | ||
264 | /* Start of Card Identification Mode ************************************/ | 264 | /* Start of Card Identification Mode ************************************/ |
265 | 265 | ||
266 | |||
267 | /* CMD0 Go Idle */ | 266 | /* CMD0 Go Idle */ |
268 | if(!send_cmd(drive, SD_GO_IDLE_STATE, 0, MCI_NO_FLAGS, NULL)) | 267 | if(!send_cmd(drive, SD_GO_IDLE_STATE, 0, MCI_NO_FLAGS, NULL)) |
269 | return -1; | 268 | return -1; |
@@ -306,10 +305,8 @@ static int sd_init_card(const int drive) | |||
306 | &card_info[drive].rca)) | 305 | &card_info[drive].rca)) |
307 | return -4; | 306 | return -4; |
308 | 307 | ||
309 | |||
310 | /* End of Card Identification Mode ************************************/ | 308 | /* End of Card Identification Mode ************************************/ |
311 | 309 | ||
312 | |||
313 | /* full speed for controller clock MCICLK = MCLK = PCLK = 62 MHz */ | 310 | /* full speed for controller clock MCICLK = MCLK = PCLK = 62 MHz */ |
314 | MCI_CLOCK(drive) |= MCI_CLOCK_BYPASS; /* FIXME: 50 MHz is spec limit */ | 311 | MCI_CLOCK(drive) |= MCI_CLOCK_BYPASS; /* FIXME: 50 MHz is spec limit */ |
315 | mci_delay(); | 312 | mci_delay(); |
@@ -490,8 +487,7 @@ static void init_pl180_controller(const int drive) | |||
490 | 487 | ||
491 | MCI_SELECT(drive) = 0; | 488 | MCI_SELECT(drive) = 0; |
492 | 489 | ||
493 | MCI_CLOCK(drive) = MCI_CLOCK_ENABLE; | 490 | /* Pl180 clocks get turned on at start of card init */ |
494 | mci_delay(); | ||
495 | } | 491 | } |
496 | 492 | ||
497 | int sd_init(void) | 493 | int sd_init(void) |