From: Shawn Guo Date: Mon, 21 Jan 2013 11:02:25 +0000 (+0800) Subject: mmc: sdhci-esdhc-imx: manually reset MIX_CTRL for usdhc X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=58c8c4fbdb5576a0afa377b1a730566b25c25cba;p=openwrt%2Fstaging%2Fblogic.git mmc: sdhci-esdhc-imx: manually reset MIX_CTRL for usdhc 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 Tested-by: Dirk Behme Signed-off-by: Chris Ball --- diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c index 48832c567f72..968a70f1a420 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)