mmc: tmio: reinit card irqs in reset routine
authorBiju Das <biju.das.jz@bp.renesas.com>
Wed, 3 Nov 2021 12:26:46 +0000 (13:26 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 10:04:42 +0000 (11:04 +0100)
[ Upstream commit e315b1f3a170f368da5618f8a598e68880302ed1 ]

Refactor the code so that card detect irqs are always reenabled after a
reset. This avoids doing it manually all over the code or forgetting to
do this in the future.

Reported-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
[wsa: added a comment when 'native_hotplug' has to be set]
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://lore.kernel.org/r/20211103122646.64422-1-wsa+renesas@sang-engineering.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/mmc/host/tmio_mmc_core.c

index e2affa5..a5850d8 100644 (file)
@@ -960,14 +960,8 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
        case MMC_POWER_OFF:
                tmio_mmc_power_off(host);
                /* For R-Car Gen2+, we need to reset SDHI specific SCC */
-               if (host->pdata->flags & TMIO_MMC_MIN_RCAR2) {
-                       host->reset(host);
-
-                       if (host->native_hotplug)
-                               tmio_mmc_enable_mmc_irqs(host,
-                                               TMIO_STAT_CARD_REMOVE |
-                                               TMIO_STAT_CARD_INSERT);
-               }
+               if (host->pdata->flags & TMIO_MMC_MIN_RCAR2)
+                       tmio_mmc_reset(host);
 
                host->set_clock(host, 0);
                break;
@@ -1175,6 +1169,7 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host)
        if (mmc_can_gpio_cd(mmc))
                _host->ops.get_cd = mmc_gpio_get_cd;
 
+       /* must be set before tmio_mmc_reset() */
        _host->native_hotplug = !(mmc_can_gpio_cd(mmc) ||
                                  mmc->caps & MMC_CAP_NEEDS_POLL ||
                                  !mmc_card_is_removable(mmc));
@@ -1295,10 +1290,6 @@ int tmio_mmc_host_runtime_resume(struct device *dev)
        if (host->clk_cache)
                host->set_clock(host, host->clk_cache);
 
-       if (host->native_hotplug)
-               tmio_mmc_enable_mmc_irqs(host,
-                               TMIO_STAT_CARD_REMOVE | TMIO_STAT_CARD_INSERT);
-
        tmio_mmc_enable_dma(host, true);
 
        return 0;