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.

Signed-off-by: Baolin Wang <baolin.w...@linaro.org>
---
 drivers/mmc/host/sdhci.c |   12 ++++++++++--
 drivers/mmc/host/sdhci.h |    2 ++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index b056400..850241f 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2729,7 +2729,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;
 }
@@ -3157,7 +3160,12 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
 
        /* 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]);
        }
 
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index 0ed3e0e..d89cdb9 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -644,6 +644,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
-- 
1.7.9.5

Reply via email to