]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
mmc: sdhci: Add a quirk to add delay during completion of sdhci_send_cmd
authorTushar Behera <tushar.behera@linaro.org>
Thu, 20 Sep 2012 20:31:57 +0000 (20:31 +0000)
committerAndy Fleming <afleming@freescale.com>
Mon, 22 Oct 2012 07:53:36 +0000 (02:53 -0500)
MMC host controller requires a delay between every sdhci_send_cmd()
execution. In s5p_mmc driver (s5p_sdhci replaces this driver), a delay
of 1000us was provided after every mmc_send_cmd() call. Adding a quirk
in current sdhci driver to replicate the behaviour.

Without this delay, MMC initialization on Origen board fails with
following error messages.

Timeout for status update!
mmc fail to send stop cmd

Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Andy Fleming <afleming@freescale.com>
drivers/mmc/s5p_sdhci.c
drivers/mmc/sdhci.c
include/sdhci.h

index b9782367e2a43ddc9647d0c1956e8f040720b21e..dc49d37f5caee08ebfccd0efe182eed6bc53ffeb 100644 (file)
@@ -83,7 +83,8 @@ int s5p_sdhci_init(u32 regbase, int index, int bus_width)
        host->ioaddr = (void *)regbase;
 
        host->quirks = SDHCI_QUIRK_NO_HISPD_BIT | SDHCI_QUIRK_BROKEN_VOLTAGE |
-               SDHCI_QUIRK_BROKEN_R1B | SDHCI_QUIRK_32BIT_DMA_ADDR;
+               SDHCI_QUIRK_BROKEN_R1B | SDHCI_QUIRK_32BIT_DMA_ADDR |
+               SDHCI_QUIRK_WAIT_SEND_CMD;
        host->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
        host->version = sdhci_readw(host, SDHCI_HOST_VERSION);
 
index 15b46868ac0db06b3d7792bd8fb6bd48fc4791e5..7845f873ac9009295768c102fd4024d75f85c565 100644 (file)
@@ -240,6 +240,9 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
        if (!ret && data)
                ret = sdhci_transfer_data(host, data, start_addr);
 
+       if (host->quirks & SDHCI_QUIRK_WAIT_SEND_CMD)
+               udelay(1000);
+
        stat = sdhci_readl(host, SDHCI_INT_STATUS);
        sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_INT_STATUS);
        if (!ret) {
index c0345ed86ef108f7d218ecbfb3ce8d6b7f13b64c..c44793d5ecf773b8baea5dd5daf860687e38648c 100644 (file)
 #define SDHCI_QUIRK_NO_HISPD_BIT       (1 << 3)
 #define SDHCI_QUIRK_BROKEN_VOLTAGE     (1 << 4)
 #define SDHCI_QUIRK_NO_CD              (1 << 5)
+#define SDHCI_QUIRK_WAIT_SEND_CMD      (1 << 6)
 
 /* to make gcc happy */
 struct sdhci_host;