From: Adrian Hunter <adrian.hunter@intel.com>
Date: Fri, 6 Mar 2020 19:38:42 +0530
Subject: mmc: cqhci: Add cqhci_deactivate()
Git-commit: 0ffa6cfbd94982e6c028a8924b06a96c1b91bed8
Patch-mainline: v5.7-rc1
References: git-fixes
Host controllers can reset CQHCI either directly or as a consequence of
host controller reset. Add cqhci_deactivate() which puts the CQHCI
driver into a state that is consistent with that.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
Link: https://lore.kernel.org/r/1583503724-13943-2-git-send-email-vbadigan@codeaurora.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/mmc/host/cqhci.c | 11 +++++++++++
drivers/mmc/host/cqhci.h | 1 +
2 files changed, 12 insertions(+)
--- a/drivers/mmc/host/cqhci.c
+++ b/drivers/mmc/host/cqhci.c
@@ -306,6 +306,17 @@ static void __cqhci_disable(struct cqhci
cq_host->activated = false;
}
+int cqhci_deactivate(struct mmc_host *mmc)
+{
+ struct cqhci_host *cq_host = mmc->cqe_private;
+
+ if (cq_host->enabled && cq_host->activated)
+ __cqhci_disable(cq_host);
+
+ return 0;
+}
+EXPORT_SYMBOL(cqhci_deactivate);
+
int cqhci_suspend(struct mmc_host *mmc)
{
struct cqhci_host *cq_host = mmc->cqe_private;
--- a/drivers/mmc/host/cqhci.h
+++ b/drivers/mmc/host/cqhci.h
@@ -234,6 +234,7 @@ irqreturn_t cqhci_irq(struct mmc_host *m
int data_error);
int cqhci_init(struct cqhci_host *cq_host, struct mmc_host *mmc, bool dma64);
struct cqhci_host *cqhci_pltfm_init(struct platform_device *pdev);
+int cqhci_deactivate(struct mmc_host *mmc);
int cqhci_suspend(struct mmc_host *mmc);
int cqhci_resume(struct mmc_host *mmc);