
* ipq40xx: revise r619ac dts * add r619ac pcie network card support on art * ipq40xx: fixed sdhci reset info bug
58 lines
1.7 KiB
Diff
58 lines
1.7 KiB
Diff
From: Georgi Djakov <georgi.djakov@linaro.org>
|
|
Date: Mon, 28 Nov 2016 19:39:20 +0200
|
|
Subject: [PATCH v2] mmc: sdhci-msm: Add sdhci_reset() implementation
|
|
|
|
Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
|
|
---
|
|
|
|
drivers/mmc/host/sdhci-msm.c | 29 ++++++++++++++++++++++++++++-
|
|
1 file changed, 28 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
|
|
index 32879b845b75..157ae07f9309 100644
|
|
--- a/drivers/mmc/host/sdhci-msm.c
|
|
+++ b/drivers/mmc/host/sdhci-msm.c
|
|
@@ -1117,6 +1117,33 @@ static void sdhci_msm_set_clock(struct sdhci_host *host, unsigned int clock)
|
|
__sdhci_msm_set_clock(host, clock);
|
|
}
|
|
|
|
+void sdhci_msm_reset(struct sdhci_host *host, u8 mask)
|
|
+{
|
|
+ unsigned long timeout = 100;
|
|
+
|
|
+ sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);
|
|
+
|
|
+ if (mask & SDHCI_RESET_ALL) {
|
|
+ host->clock = 0;
|
|
+
|
|
+ /*
|
|
+ * SDHCI_RESET_ALL triggers the PWR IRQ
|
|
+ * and we need to handle it here.
|
|
+ */
|
|
+ sdhci_msm_voltage_switch(host);
|
|
+ }
|
|
+
|
|
+ while (sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask) {
|
|
+ if (timeout == 0) {
|
|
+ pr_err("%s: Reset 0x%x never completed.\n",
|
|
+ mmc_hostname(host->mmc), (int)mask);
|
|
+ return;
|
|
+ }
|
|
+ timeout--;
|
|
+ mdelay(1);
|
|
+ }
|
|
+}
|
|
+
|
|
static void sdhci_msm_write_w(struct sdhci_host *host, u16 val, int reg)
|
|
{
|
|
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
|
|
@@ -1148,7 +1174,7 @@ static const struct of_device_id sdhci_msm_dt_match[] = {
|
|
MODULE_DEVICE_TABLE(of, sdhci_msm_dt_match);
|
|
|
|
static const struct sdhci_ops sdhci_msm_ops = {
|
|
- .reset = sdhci_reset,
|
|
+ .reset = sdhci_msm_reset,
|
|
.set_clock = sdhci_set_clock,
|
|
.get_min_clock = sdhci_msm_get_min_clock,
|
|
.get_max_clock = sdhci_msm_get_max_clock,
|