From: Rick VanderWal <rvander...@bellsouth.net>

This fixes an issue where the card present signal doesn't stabilize
quickly and indicates present when no card is inserted in a removable
slot.
---
 rtemsbsd/sys/dev/sdhci/arasan_sdhci.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c 
b/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c
index 0e87d903..722e609d 100644
--- a/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c
+++ b/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c
@@ -195,6 +195,27 @@ arasan_sdhci_get_card_present(device_t dev, struct 
sdhci_slot *slot)
 {
        struct arasan_sdhci_softc *sc = device_get_softc(dev);
 
+       // wait a maximum of 1 second for card stable to settle
+       const unsigned int max_tries = 20;
+       const rtems_interval sleep_ticks =
+               rtems_clock_get_ticks_per_second() / max_tries;
+
+       unsigned int count = 0;
+       while (!(RD4(sc, SDHCI_PRESENT_STATE) & SDHCI_CARD_STABLE) &&
+               (count < max_tries))
+       {
+               rtems_task_wake_after(sleep_ticks);
+               ++count;
+       }
+
+       if (!(RD4(sc, SDHCI_PRESENT_STATE) & SDHCI_CARD_STABLE))
+       {
+               device_printf(dev,
+                       "Card Detect failed to stabilize,"
+                       " setting to not present.\n");
+               return false;
+       }
+
        return (RD4(sc, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
 }
 
-- 
2.34.1

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to