Hi, On Tue, Apr 05 2011, Ohad Ben-Cohen wrote: > 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@xxxxxxxxxx> > Signed-off-by: Ohad Ben-Cohen <ohad@xxxxxxxxxx> > --- > drivers/mmc/core/sdio.c | 4 ++-- > include/linux/mmc/host.h | 4 ++++ > 2 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c > index 0f7d436..4221670 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) > } > } > > - if (!err && mmc_card_keep_power(host)) { > + if (!err && mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { > mmc_claim_host(host); > sdio_disable_wide(host->card); > mmc_release_host(host); > @@ -648,7 +648,7 @@ static int mmc_sdio_resume(struct mmc_host *host) > if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) > err = mmc_sdio_init_card(host, host->ocr, host->card, > mmc_card_keep_power(host)); > - else if (mmc_card_keep_power(host)) { > + else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { > /* We may have switched to 1-bit mode during suspend */ > err = sdio_enable_4bit_bus(host->card); > if (err > 0) { > diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h > index cccb5cf..4f705eb 100644 > --- a/include/linux/mmc/host.h > +++ b/include/linux/mmc/host.h > @@ -326,5 +326,9 @@ static inline int mmc_card_keep_power(struct mmc_host *host) > return host->pm_flags & MMC_PM_KEEP_POWER; > } > > +static inline int mmc_card_wake_sdio_irq(struct mmc_host *host) > +{ > + return host->pm_flags & MMC_PM_WAKE_SDIO_IRQ; > +} > #endif Thanks, pushed to mmc-next for .40. - Chris. -- Chris Ball <cjb@xxxxxxxxxx> <http://printf.net/> One Laptop Per Child -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html