From dd009a288e68ac9b1a51317842852c3373bc2548 Mon Sep 17 00:00:00 2001 From: Aaron Lu Date: Wed, 4 Jan 2012 10:07:43 +0800 Subject: [PATCH] --- yaml --- r: 284527 b: refs/heads/master c: 38a60ea2e7b33ab33ee11d6ef527f259edb102cf h: refs/heads/master i: 284525: 37cfb8d4bfa045018cab0b6d29d631de9007afff 284523: 8e4576296b73db008dda21baf5739ee52df6a143 284519: 450138b90ae74fa873f2b523b251c51d3ede6d99 284511: 2c65e0e1c23a0176b11dd0e425c52ad76a0a263c v: v3 --- [refs] | 2 +- trunk/drivers/mmc/host/sdhci.c | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 6301a0a3921f..e8b86f983b0a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3f514291df96e0a34bc61c7c456ca1d3fdc1f1bb +refs/heads/master: 38a60ea2e7b33ab33ee11d6ef527f259edb102cf diff --git a/trunk/drivers/mmc/host/sdhci.c b/trunk/drivers/mmc/host/sdhci.c index 3d338b4b416a..0636e9a587b1 100644 --- a/trunk/drivers/mmc/host/sdhci.c +++ b/trunk/drivers/mmc/host/sdhci.c @@ -2349,19 +2349,30 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) int sdhci_suspend_host(struct sdhci_host *host) { int ret; + bool has_tuning_timer; sdhci_disable_card_detection(host); /* Disable tuning since we are suspending */ - if (host->version >= SDHCI_SPEC_300 && host->tuning_count && - host->tuning_mode == SDHCI_TUNING_MODE_1) { + has_tuning_timer = host->version >= SDHCI_SPEC_300 && + host->tuning_count && host->tuning_mode == SDHCI_TUNING_MODE_1; + if (has_tuning_timer) { del_timer_sync(&host->tuning_timer); host->flags &= ~SDHCI_NEEDS_RETUNING; } ret = mmc_suspend_host(host->mmc); - if (ret) + if (ret) { + if (has_tuning_timer) { + host->flags |= SDHCI_NEEDS_RETUNING; + mod_timer(&host->tuning_timer, jiffies + + host->tuning_count * HZ); + } + + sdhci_enable_card_detection(host); + return ret; + } free_irq(host->irq, host);