aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/core/sdio.c
diff options
context:
space:
mode:
authorOhad Ben-Cohen <ohad@wizery.com>2011-04-05 10:43:21 -0400
committerChris Ball <cjb@laptop.org>2011-05-24 20:59:47 -0400
commit6b93d01fe5971951911a070f51f412d50e9536dc (patch)
tree0e0221f3af9f954bd60e469f94810730899ee374 /drivers/mmc/core/sdio.c
parenta5e9425d2010978c5f85986cc70a9fa0c0d5b912 (diff)
mmc: do not switch to 1-bit mode if not required
6b5eda36 followed SDIO spec part E1 section 8, which states that in case SDIO interrupts are being used to wake up a suspended host, then it is required to switch to 1-bit mode before stopping the clock. Before switching to 1-bit mode (or back to 4-bit mode on resume), make sure that SDIO interrupts are really being used to wake the host. This is helpful for devices which have an external irq line (e.g. wl1271), and do not use SDIO interrupts to wake up the host. In this case, switching to 1-bit mode (and back to 4-bit mode on resume) is not necessary. Reported-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/core/sdio.c')
-rw-r--r--drivers/mmc/core/sdio.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index 0f7d4362d213..4221670bf82e 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -625,7 +625,7 @@ static int mmc_sdio_suspend(struct mmc_host *host)
625 } 625 }
626 } 626 }
627 627
628 if (!err && mmc_card_keep_power(host)) { 628 if (!err && mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
629 mmc_claim_host(host); 629 mmc_claim_host(host);
630 sdio_disable_wide(host->card); 630 sdio_disable_wide(host->card);
631 mmc_release_host(host); 631 mmc_release_host(host);
@@ -648,7 +648,7 @@ static int mmc_sdio_resume(struct mmc_host *host)
648 if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) 648 if (mmc_card_is_removable(host) || !mmc_card_keep_power(host))
649 err = mmc_sdio_init_card(host, host->ocr, host->card, 649 err = mmc_sdio_init_card(host, host->ocr, host->card,
650 mmc_card_keep_power(host)); 650 mmc_card_keep_power(host));
651 else if (mmc_card_keep_power(host)) { 651 else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
652 /* We may have switched to 1-bit mode during suspend */ 652 /* We may have switched to 1-bit mode during suspend */
653 err = sdio_enable_4bit_bus(host->card); 653 err = sdio_enable_4bit_bus(host->card);
654 if (err > 0) { 654 if (err > 0) {