Blob Blame History Raw
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);