aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/sdhci.c
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2016-11-02 15:49:10 +0200
committerUlf Hansson <ulf.hansson@linaro.org>2016-11-07 13:26:43 +0100
commitfe5fb2e3b58f866f82a80fe7c7866ea6d0b306b9 (patch)
tree2fa84f01674ebbe68a53b75bdbd9b5458a872244 /drivers/mmc/host/sdhci.c
parentmmc: sdhci: Fix unexpected data interrupt handling (diff)
downloadlinux-dev-fe5fb2e3b58f866f82a80fe7c7866ea6d0b306b9.tar.xz
linux-dev-fe5fb2e3b58f866f82a80fe7c7866ea6d0b306b9.zip
mmc: sdhci: Reset cmd and data circuits after tuning failure
To prevent subsequent commands failing, ensure the cmd and data circuits are reset after a tuning timeout. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to '')
-rw-r--r--drivers/mmc/host/sdhci.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 0dd3c31e23bb..542aabc48032 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2086,6 +2086,10 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
if (!host->tuning_done) {
pr_info(DRIVER_NAME ": Timeout waiting for Buffer Read Ready interrupt during tuning procedure, falling back to fixed sampling clock\n");
+
+ sdhci_do_reset(host, SDHCI_RESET_CMD);
+ sdhci_do_reset(host, SDHCI_RESET_DATA);
+
ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
ctrl &= ~SDHCI_CTRL_TUNED_CLK;
ctrl &= ~SDHCI_CTRL_EXEC_TUNING;