From: Kuninori Morimoto <kuninori.morimoto...@renesas.com>

Now, omap_hsmmc can use blk_size_workaround instead of
MMC_CAP2_NO_MULTI_READ. let's use it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto...@renesas.com>
---
v1 -> v2

- fix typo : .blk_workaround -> .blk_size_workaround

 drivers/mmc/host/omap_hsmmc.c |   17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index ece1634..a7ab924 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -219,6 +219,7 @@ struct omap_hsmmc_host {
 #define AUTO_CMD23             (1 << 0)        /* Auto CMD23 support */
 #define HSMMC_SDIO_IRQ_ENABLED (1 << 1)        /* SDIO irq enabled */
 #define HSMMC_WAKE_IRQ_ENABLED (1 << 2)
+#define HSMMC_NO_MULTI_READ    (1 << 3)
        struct omap_hsmmc_next  next_data;
        struct  omap_mmc_platform_data  *pdata;
 };
@@ -1829,6 +1830,19 @@ static int omap_hsmmc_disable_fclk(struct mmc_host *mmc)
        return 0;
 }
 
+static int *omap_hsmmc_blk_size_workaround(struct mmc_card *card,
+                                          struct request *req, int blk_size)
+{
+       struct omap_hsmmc_host *host = mmc_priv(card->host);
+
+       /* Some controllers can't do multiblock reads due to hw bugs */
+       if ((host->flags & HSMMC_NO_MULTI_READ) &&
+           (rq_data_dir(req) == READ))
+               return 1;
+
+       return blk_size;
+}
+
 static const struct mmc_host_ops omap_hsmmc_ops = {
        .enable = omap_hsmmc_enable_fclk,
        .disable = omap_hsmmc_disable_fclk,
@@ -1840,6 +1854,7 @@ static const struct mmc_host_ops omap_hsmmc_ops = {
        .get_ro = omap_hsmmc_get_ro,
        .init_card = omap_hsmmc_init_card,
        .enable_sdio_irq = omap_hsmmc_enable_sdio_irq,
+       .blk_size_workaround = omap_hsmmc_blk_size_workaround,
 };
 
 #ifdef CONFIG_DEBUG_FS
@@ -2101,7 +2116,7 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
 
        if (host->pdata->controller_flags & OMAP_HSMMC_BROKEN_MULTIBLOCK_READ) {
                dev_info(&pdev->dev, "multiblock reads disabled due to 35xx 
erratum 2.1.1.128; MMC read performance may suffer\n");
-               mmc->caps2 |= MMC_CAP2_NO_MULTI_READ;
+               host->flags |= HSMMC_NO_MULTI_READ;
        }
 
        pm_runtime_enable(host->dev);
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to