]> xenbits.xensource.com Git - seabios.git/commitdiff
sdcard: Move frequency setting into sdcard_card_setup()
authorKevin O'Connor <kevin@koconnor.net>
Tue, 18 Aug 2015 15:33:41 +0000 (11:33 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Thu, 3 Sep 2015 13:50:35 +0000 (09:50 -0400)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
src/hw/sdcard.c

index bf35277fb6d0315eb754316bb870eba1a8b442c5..a60fa92a579eba439627b35595e49c89d7218ed1 100644 (file)
@@ -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
@@ -410,6 +415,10 @@ sdcard_card_setup(struct sdhci_s *regs, int volt)
     u16 rca = isMMC ? 0x0001 : param[0] >> 16;
     param[0] = rca << 16;
     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));