|
@@ -1525,9 +1525,23 @@ static int dw_mci_get_cd(struct mmc_host *mmc)
|
|
|
int gpio_cd = mmc_gpio_get_cd(mmc);
|
|
|
|
|
|
/* Use platform get_cd function, else try onboard card detect */
|
|
|
- if ((mmc->caps & MMC_CAP_NEEDS_POLL) || !mmc_card_is_removable(mmc))
|
|
|
+ if (((mmc->caps & MMC_CAP_NEEDS_POLL)
|
|
|
+ || !mmc_card_is_removable(mmc))) {
|
|
|
present = 1;
|
|
|
- else if (gpio_cd >= 0)
|
|
|
+
|
|
|
+ if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
|
|
|
+ if (mmc->caps & MMC_CAP_NEEDS_POLL) {
|
|
|
+ dev_info(&mmc->class_dev,
|
|
|
+ "card is polling.\n");
|
|
|
+ } else {
|
|
|
+ dev_info(&mmc->class_dev,
|
|
|
+ "card is non-removable.\n");
|
|
|
+ }
|
|
|
+ set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
|
|
|
+ }
|
|
|
+
|
|
|
+ return present;
|
|
|
+ } else if (gpio_cd >= 0)
|
|
|
present = gpio_cd;
|
|
|
else
|
|
|
present = (mci_readl(slot->host, CDETECT) & (1 << slot->id))
|