mmc: sdhci-s3c: fix missing clock for gpio card-detect

A patch from »mmc: sdhci-s3c: fix missing clock for gpio card-detect« in state Mainline for linux-kernel

From: Heiko Stuebner <heiko@...> Date: Sun, 18 Nov 2012 19:22:05 +0100

Commit-Message

Commit 2abeb5c5ded2 (Add clk_(enable/disable) in runtime suspend/resume) added the capability to stop the clocks when the device is runtime suspended, but forgot to handle the case of the card-detect using an external gpio. Therefore in the case that runtime-pm is enabled, start the io-clock when a card is inserted and stop it again once it is removed. Signed-off-by: Heiko Stuebner <heiko@...>

Patch-Comment

drivers/mmc/host/sdhci-s3c.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) This _should_ go into 3.7 because currently it causes a regression there. Nevertheless it applies to both 3.7-rc6 and linux-next. I also tried to use pm_runtime_get_sync (and _put) there, but it didn't seem to work and the clock was still missing. With the changes in this patch, the gpio-card-detect works again on my machine - all of insert, remove and reinsert.

Statistics

  • 7 lines added
  • 0 lines removed

Changes

------------------------- drivers/mmc/host/sdhci-s3c.c -------------------------
index a54dd5d..c9ec725 100644
@@ -373,18 +373,25 @@ static struct sdhci_ops sdhci_s3c_ops = {
static void sdhci_s3c_notify_change(struct platform_device *dev, int state)
{
struct sdhci_host *host = platform_get_drvdata(dev);
+ struct sdhci_s3c *sc = sdhci_priv(host);
unsigned long flags;
if (host) {
spin_lock_irqsave(&host->lock, flags);
if (state) {
dev_dbg(&dev->dev, "card inserted.\n");
+#ifdef CONFIG_PM_RUNTIME
+ clk_prepare_enable(sc->clk_io);
+#endif
host->flags &= ~SDHCI_DEVICE_DEAD;
host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;
} else {
dev_dbg(&dev->dev, "card removed.\n");
host->flags |= SDHCI_DEVICE_DEAD;
host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION;
+#ifdef CONFIG_PM_RUNTIME
+ clk_disable_unprepare(sc->clk_io);
+#endif
}
tasklet_schedule(&host->card_tasklet);
spin_unlock_irqrestore(&host->lock, flags);
 
 

Recent Patches

About Us

Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum vel, tempor at, varius non, purus. Mauris vitae nisl nec metus placerat consectetuer.

Read More...