static bool dw_mci_reset(struct dw_mci *host);
 static bool dw_mci_ctrl_reset(struct dw_mci *host, u32 reset);
 static int dw_mci_card_busy(struct mmc_host *mmc);
+static int dw_mci_get_cd(struct mmc_host *mmc);
 
 #if defined(CONFIG_DEBUG_FS)
 static int dw_mci_req_show(struct seq_file *s, void *v)
         * atomic, otherwise the card could be removed in between and the
         * request wouldn't fail until another card was inserted.
         */
-       spin_lock_bh(&host->lock);
 
-       if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
-               spin_unlock_bh(&host->lock);
+       if (!dw_mci_get_cd(mmc)) {
                mrq->cmd->error = -ENOMEDIUM;
                mmc_request_done(mmc, mrq);
                return;
        }
 
+       spin_lock_bh(&host->lock);
+
        dw_mci_queue_request(host, slot, mrq);
 
        spin_unlock_bh(&host->lock);