|
@@ -1176,13 +1176,24 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit)
|
|
|
|
|
|
div = (host->bus_hz != clock) ? DIV_ROUND_UP(div, 2) : 0;
|
|
div = (host->bus_hz != clock) ? DIV_ROUND_UP(div, 2) : 0;
|
|
|
|
|
|
- if (clock != slot->__clk_old || force_clkinit)
|
|
|
|
|
|
+ if ((clock != slot->__clk_old &&
|
|
|
|
+ !test_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags)) ||
|
|
|
|
+ force_clkinit) {
|
|
dev_info(&slot->mmc->class_dev,
|
|
dev_info(&slot->mmc->class_dev,
|
|
"Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n",
|
|
"Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n",
|
|
slot->id, host->bus_hz, clock,
|
|
slot->id, host->bus_hz, clock,
|
|
div ? ((host->bus_hz / div) >> 1) :
|
|
div ? ((host->bus_hz / div) >> 1) :
|
|
host->bus_hz, div);
|
|
host->bus_hz, div);
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * If card is polling, display the message only
|
|
|
|
+ * one time at boot time.
|
|
|
|
+ */
|
|
|
|
+ if (slot->mmc->caps & MMC_CAP_NEEDS_POLL &&
|
|
|
|
+ slot->mmc->f_min == clock)
|
|
|
|
+ set_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags);
|
|
|
|
+ }
|
|
|
|
+
|
|
/* disable clock */
|
|
/* disable clock */
|
|
mci_writel(host, CLKENA, 0);
|
|
mci_writel(host, CLKENA, 0);
|
|
mci_writel(host, CLKSRC, 0);
|
|
mci_writel(host, CLKSRC, 0);
|