aboutsummaryrefslogtreecommitdiffstats
path: root/src/hw/sdcard.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2015-08-18 11:33:41 -0400
committerKevin O'Connor <kevin@koconnor.net>2015-09-03 09:50:35 -0400
commit17b811bc720fb487e6e0643f25f143ac692d0512 (patch)
tree1d29eb621822b94cd1a307d0974e6e06de3940b8 /src/hw/sdcard.c
parent91a9f5baee569a7751270afe355775b3d0f58a37 (diff)
downloadseabios-17b811bc720fb487e6e0643f25f143ac692d0512.tar.gz
sdcard: Move frequency setting into sdcard_card_setup()
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/hw/sdcard.c')
-rw-r--r--src/hw/sdcard.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/hw/sdcard.c b/src/hw/sdcard.c
index bf35277f..a60fa92a 100644
--- a/src/hw/sdcard.c
+++ b/src/hw/sdcard.c
@@ -355,9 +355,14 @@ sdcard_set_frequency(struct sdhci_s *regs, u32 khz)
static int
sdcard_card_setup(struct sdhci_s *regs, int volt)
{
+ // Set controller to initialization clock rate
+ int ret = sdcard_set_frequency(regs, 400);
+ if (ret)
+ return ret;
+ msleep(SDHCI_CLOCK_ON_TIME);
// Reset card
u32 param[4] = { };
- int ret = sdcard_pio(regs, SC_GO_IDLE_STATE, param);
+ ret = sdcard_pio(regs, SC_GO_IDLE_STATE, param);
if (ret)
return ret;
// Let card know SDHC/SDXC is supported and confirm voltage
@@ -412,6 +417,10 @@ sdcard_card_setup(struct sdhci_s *regs, int volt)
ret = sdcard_pio(regs, SC_SELECT_DESELECT_CARD, param);
if (ret)
return ret;
+ // Set controller to data transfer clock rate
+ ret = sdcard_set_frequency(regs, 25000);
+ if (ret)
+ return ret;
return card_type;
}
@@ -438,18 +447,11 @@ sdcard_controller_setup(struct sdhci_s *regs, int prio)
int volt = sdcard_set_power(regs);
if (volt < 0)
return;
- int ret = sdcard_set_frequency(regs, 400);
- if (ret)
- goto fail;
- msleep(SDHCI_CLOCK_ON_TIME);
// Initialize card
int card_type = sdcard_card_setup(regs, volt);
if (card_type < 0)
goto fail;
- ret = sdcard_set_frequency(regs, 25000);
- if (ret)
- goto fail;
// Register drive
struct sddrive_s *drive = malloc_fseg(sizeof(*drive));