mmc: sdhci: fix bus width switching on Samsung SoCs
authorMatt Reimer <mreimer@sdgsystems.com>
Thu, 19 Feb 2015 18:22:53 +0000 (11:22 -0700)
committerPantelis Antoniou <pantelis.antoniou@konsulko.com>
Mon, 23 Feb 2015 17:52:00 +0000 (19:52 +0200)
Fix bus width switching from 8-bit mode down to 4-bit or 1-bit modes on
Samsung SoCs using SDHCI_QUIRK_USE_WIDE8.  These SoCs report controller
version 2.0 yet they support 8-bit bus widths.  If 8-bit mode was
previously enabled and then an operation like "mmc dev" caused a switch
back down to 4-bit or 1-bit mode, WIDE8 was left set, causing failures.

This problem was manifested by "mmc dev" timing out.

Signed-off-by: Matt Reimer <mreimer@sdgsystems.com>
drivers/mmc/sdhci.c

index de88e19609f37aaba48665e9bff60f6a7b63f31b..82d7984a51633bcf6e8a3294604bf2832568ec03 100644 (file)
@@ -374,7 +374,8 @@ static void sdhci_set_ios(struct mmc *mmc)
                                (host->quirks & SDHCI_QUIRK_USE_WIDE8))
                        ctrl |= SDHCI_CTRL_8BITBUS;
        } else {
-               if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300)
+               if ((SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) ||
+                               (host->quirks & SDHCI_QUIRK_USE_WIDE8))
                        ctrl &= ~SDHCI_CTRL_8BITBUS;
                if (mmc->bus_width == 4)
                        ctrl |= SDHCI_CTRL_4BITBUS;