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
This commit is contained in:
parent
d8f420a48d
commit
40629be046
1 changed files with 4 additions and 8 deletions
|
@ -257,13 +257,12 @@ static int sd_init_card(const int drive)
|
|||
int i;
|
||||
|
||||
|
||||
/* MCLCK on and set to 400kHz ident frequency */
|
||||
MCI_CLOCK(drive) = MCI_CLOCK_ENABLE | AS3525_SD_IDENT_DIV;
|
||||
|
||||
/* 100 - 400kHz clock required for Identification Mode */
|
||||
MCI_CLOCK(drive) = (MCI_CLOCK(drive) & 0xf00) | AS3525_SD_IDENT_DIV;
|
||||
|
||||
|
||||
/* Start of Card Identification Mode ************************************/
|
||||
|
||||
|
||||
/* CMD0 Go Idle */
|
||||
if(!send_cmd(drive, SD_GO_IDLE_STATE, 0, MCI_NO_FLAGS, NULL))
|
||||
return -1;
|
||||
|
@ -306,10 +305,8 @@ static int sd_init_card(const int drive)
|
|||
&card_info[drive].rca))
|
||||
return -4;
|
||||
|
||||
|
||||
/* End of Card Identification Mode ************************************/
|
||||
|
||||
|
||||
/* full speed for controller clock MCICLK = MCLK = PCLK = 62 MHz */
|
||||
MCI_CLOCK(drive) |= MCI_CLOCK_BYPASS; /* FIXME: 50 MHz is spec limit */
|
||||
mci_delay();
|
||||
|
@ -490,8 +487,7 @@ static void init_pl180_controller(const int drive)
|
|||
|
||||
MCI_SELECT(drive) = 0;
|
||||
|
||||
MCI_CLOCK(drive) = MCI_CLOCK_ENABLE;
|
||||
mci_delay();
|
||||
/* Pl180 clocks get turned on at start of card init */
|
||||
}
|
||||
|
||||
int sd_init(void)
|
||||
|
|
Loading…
Reference in a new issue