Re: [PATCH 2/2] mmc: do not switch to 1-bit mode if not required

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux