The quirk SDHCI_QUIRK_BROKEN_CARD_DETECTION is not quite what may needed for
embedded systems.
Sometimes the card is hard wired onto the board and is always present --
usually the signal into the controller
is not used by the board designed -- saves a pin
Sometimes the card is plugged into a slot and Card Detect REALLY is broken. In
this case we need to poll by
setting MMC_CAP_NEEDS_POLL so mmc_detect_change() will find the card.
if (host->caps & MMC_CAP_NEEDS_POLL)
mmc_schedule_delayed_work(&host->detect, HZ);
Since the behavior is a board issue I think it makes more sense to define a new
struct sdhci_ops {
}
that gets called and the adaption layer can decide to set or not set
MMC_CAP_NEEDS_POLL. if this is okay will
generate the patch.
Sample code snippets below
struct sdhci_ops {
......
void (*card_detect)(struct sdhci_host *host);
}
====
replace
if (caps & SDHCI_CAN_DO_HISPD)
mmc->caps |= MMC_CAP_SD_HIGHSPEED;
if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION)
mmc->caps |= MMC_CAP_NEEDS_POLL;
with
if (caps & SDHCI_CAN_DO_HISPD)
mmc->caps |= MMC_CAP_SD_HIGHSPEED;
if (host->ops->card_detect)
host->ops->card_detect(host)
====
platform code
void card_detect (struct sdhci_host *host)
{
if (card_hard_wired || sd_slot_has_no_card_detect_signal) {
host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;
if (sd_slot_has_no_card_detect_signal)
host->mmc->caps |= MMC_CAP_NEEDS_POLL
}
}--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html