diff options
author | Rick VanderWal <rvanderwal@bellsouth.net> | 2023-03-29 16:07:52 -0500 |
---|---|---|
committer | Joel Sherrill <joel@rtems.org> | 2023-04-04 09:48:25 -0500 |
commit | ac4cf946a28329cc65cbc0c30ec1ed0d6449d7cc (patch) | |
tree | ce0559bdd197c359d2e1c9b7bdeb8e617f721170 | |
parent | waf: Update to waf 2.0.25 (diff) | |
download | rtems-libbsd-ac4cf946a28329cc65cbc0c30ec1ed0d6449d7cc.tar.bz2 |
rtemsbsd/sdhci: Fix Arasan driver when no card present
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.
-rw-r--r-- | rtemsbsd/sys/dev/sdhci/arasan_sdhci.c | 21 |
1 files changed, 21 insertions, 0 deletions
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); } |