It's another violation to SDHC spec that software reset on usdhc
does not reset MIX_CTRL register.  Have to do it manually, otherwise
the preserving of the register bits (e.g. AC23EN) may cause mmc card
fail to be initialized.

Signed-off-by: Shawn Guo <[email protected]>
---
 drivers/mmc/host/sdhci-esdhc-imx.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c 
b/drivers/mmc/host/sdhci-esdhc-imx.c
index 48832c5..968a70f 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -318,8 +318,15 @@ static void esdhc_writeb_le(struct sdhci_host *host, u8 
val, int reg)
         * circuit relies on.  To work around it, we turn the clocks on back
         * to keep card detection circuit functional.
         */
-       if ((reg == SDHCI_SOFTWARE_RESET) && (val & 1))
+       if ((reg == SDHCI_SOFTWARE_RESET) && (val & 1)) {
                esdhc_clrset_le(host, 0x7, 0x7, ESDHC_SYSTEM_CONTROL);
+               /*
+                * The reset on usdhc fails to clear MIX_CTRL register.
+                * Do it manually here.
+                */
+               if (is_imx6q_usdhc(imx_data))
+                       writel(0, host->ioaddr + ESDHC_MIX_CTRL);
+       }
 }
 
 static unsigned int esdhc_pltfm_get_max_clock(struct sdhci_host *host)
-- 
1.7.9.5


--
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

Reply via email to