summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorVenkat Gopalakrishnan <venkatg@codeaurora.org>2015-01-12 19:52:35 -0800
committerSubhash Jadavani <subhashj@codeaurora.org>2016-05-31 15:26:04 -0700
commite224d1c722c113973b3bbc22d215bd59f927104e (patch)
treee5818a2fbde9c70c93edaf8c2d11a42f6d7d98b1 /drivers
parenta14ad583988ef20b6504ce889ba18ed9dc363603 (diff)
mmc: sdhci: Fix spinlock handling in sdhci_do_set_ios()
sdhci_update_clock() has been removed and host ops set_clock() is called directly in various places. Release the host spinlock before calling host ops set_clock(). Change-Id: Ia12917286a7d791e6a6ad826c0b7edd71c8694ae Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/host/sdhci.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index a47105ae1554..e9d6472d7ccf 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1832,8 +1832,11 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios)
sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
/* Re-enable SD Clock */
- if (ios->clock)
+ if (ios->clock) {
+ spin_unlock_irqrestore(&host->lock, flags);
host->ops->set_clock(host, host->clock);
+ spin_lock_irqsave(&host->lock, flags);
+ }
}
/* Reset SD Clock Enable */
@@ -1860,8 +1863,11 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios)
}
/* Re-enable SD Clock */
- if (ios->clock)
+ if (ios->clock) {
+ spin_unlock_irqrestore(&host->lock, flags);
host->ops->set_clock(host, host->clock);
+ spin_lock_irqsave(&host->lock, flags);
+ }
} else
sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);