mmc: tmio: support custom irq masks
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Tue, 23 Feb 2021 10:08:29 +0000 (11:08 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 30 Mar 2021 09:41:59 +0000 (11:41 +0200)
SDHI Gen2+ has a different value for TMIO_MASK_ALL, so add a member to
support that. If the member is not used, the previous default value is
applied.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Link: https://lore.kernel.org/r/20210223100830.25125-2-wsa+renesas@sang-engineering.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/tmio_mmc.h
drivers/mmc/host/tmio_mmc_core.c

index 2d1db9396d4a52a9740d057f9bf3fa5e096740ab..7d5201d6a006ebcd0f1a32728098041e54c8fe82 100644 (file)
@@ -164,6 +164,7 @@ struct tmio_mmc_host {
        u32                     sdio_irq_mask;
        unsigned int            clk_cache;
        u32                     sdcard_irq_setbit_mask;
+       u32                     sdcard_irq_mask_all;
 
        spinlock_t              lock;           /* protect host private data */
        unsigned long           last_req_ts;
index 2478a91e84b24ba7770f18bb8109ebbcf124b3cb..5aa57640d0e677264963c36945117ad7c8b72b75 100644 (file)
@@ -1175,7 +1175,9 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host)
        tmio_mmc_reset(_host);
 
        _host->sdcard_irq_mask = sd_ctrl_read16_and_16_as_32(_host, CTL_IRQ_MASK);
-       tmio_mmc_disable_mmc_irqs(_host, TMIO_MASK_ALL);
+       if (!_host->sdcard_irq_mask_all)
+               _host->sdcard_irq_mask_all = TMIO_MASK_ALL;
+       tmio_mmc_disable_mmc_irqs(_host, _host->sdcard_irq_mask_all);
 
        if (_host->native_hotplug)
                tmio_mmc_enable_mmc_irqs(_host,
@@ -1229,7 +1231,7 @@ void tmio_mmc_host_remove(struct tmio_mmc_host *host)
        cancel_work_sync(&host->done);
        cancel_delayed_work_sync(&host->delayed_reset_work);
        tmio_mmc_release_dma(host);
-       tmio_mmc_disable_mmc_irqs(host, TMIO_MASK_ALL);
+       tmio_mmc_disable_mmc_irqs(host, host->sdcard_irq_mask_all);
 
        if (host->native_hotplug)
                pm_runtime_put_noidle(&pdev->dev);
@@ -1259,7 +1261,7 @@ int tmio_mmc_host_runtime_suspend(struct device *dev)
 {
        struct tmio_mmc_host *host = dev_get_drvdata(dev);
 
-       tmio_mmc_disable_mmc_irqs(host, TMIO_MASK_ALL);
+       tmio_mmc_disable_mmc_irqs(host, host->sdcard_irq_mask_all);
 
        if (host->clk_cache)
                host->set_clock(host, 0);