OSDN Git Service

mmc: host: sdhci: Add request_done ops for struct sdhci_ops
authorBaolin Wang <baolin.wang@linaro.org>
Wed, 12 Feb 2020 04:12:58 +0000 (12:12 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 24 Mar 2020 13:35:39 +0000 (14:35 +0100)
Add request_done ops for struct sdhci_ops as a preparation in case some
host controllers have different method to complete one request, such as
supporting request completion of MMC software queue.

Suggested-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
Signed-off-by: Baolin Wang <baolin.wang7@gmail.com>
Link: https://lore.kernel.org/r/1539c801c8bbdbcd1d86f8c2dab375f5803c765a.1581478568.git.baolin.wang7@gmail.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci.c
drivers/mmc/host/sdhci.h

index 63db844..9761981 100644 (file)
@@ -2944,7 +2944,10 @@ static bool sdhci_request_done(struct sdhci_host *host)
 
        spin_unlock_irqrestore(&host->lock, flags);
 
-       mmc_request_done(host->mmc, mrq);
+       if (host->ops->request_done)
+               host->ops->request_done(host, mrq);
+       else
+               mmc_request_done(host->mmc, mrq);
 
        return false;
 }
@@ -3372,7 +3375,12 @@ out:
 
        /* Process mrqs ready for immediate completion */
        for (i = 0; i < SDHCI_MAX_MRQS; i++) {
-               if (mrqs_done[i])
+               if (!mrqs_done[i])
+                       continue;
+
+               if (host->ops->request_done)
+                       host->ops->request_done(host, mrqs_done[i]);
+               else
                        mmc_request_done(host->mmc, mrqs_done[i]);
        }
 
index a6a3ddc..3e95f74 100644 (file)
@@ -654,6 +654,8 @@ struct sdhci_ops {
        void    (*voltage_switch)(struct sdhci_host *host);
        void    (*adma_write_desc)(struct sdhci_host *host, void **desc,
                                   dma_addr_t addr, int len, unsigned int cmd);
+       void    (*request_done)(struct sdhci_host *host,
+                               struct mmc_request *mrq);
 };
 
 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS