Re: [PATCH] mmc: sdio: Fix 1-bit mode for SD-combo cards during suspend

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

 



On Tue, 9 Jun 2020 at 10:14, Yue Hu <zbestahu@xxxxxxxxx> wrote:
>
> From: Yue Hu <huyue2@xxxxxxxxxx>
>
> Commit 6b5eda369ac3 ("sdio: put active devices into 1-bit mode during
> suspend") disabled 4-bit mode during system suspend. After this patch,
> commit 7310ece86ad7 ("mmc: implement SD-combo (IO+mem) support") used
> new sdio_enable_4bit_bus() instead of sdio_enable_wide() to support
> SD-combo cards, also for card resume. However, no corresponding support
> added during suspend. That is not correct. Let's fix it.

I believe the change makes sense to me.

However, the commit 6b5eda369ac3 that you refer to is from v2.6.34,
which is more than ten years ago. That makes me wonder, are these
cards really being used?

Did you test this with a combo card?

>
> Signed-off-by: Yue Hu <huyue2@xxxxxxxxxx>
> ---
>  drivers/mmc/core/sdio.c | 23 ++++++++++++++++++++++-
>  1 file changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
> index ebb387a..2d2ae35 100644
> --- a/drivers/mmc/core/sdio.c
> +++ b/drivers/mmc/core/sdio.c
> @@ -285,6 +285,27 @@ static int sdio_disable_wide(struct mmc_card *card)
>         return 0;
>  }
>
> +static int sdio_disable_4bit_bus(struct mmc_card *card)
> +{
> +       int err;
> +
> +       if (card->type == MMC_TYPE_SDIO)
> +               goto out;
> +
> +       if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
> +               return 0;
> +
> +       if (!(card->scr.bus_widths & SD_SCR_BUS_WIDTH_4))
> +               return 0;
> +
> +       err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_1);
> +       if (err)
> +               return err;
> +
> +out:
> +       return sdio_disable_wide(card);
> +}
> +
>
>  static int sdio_enable_4bit_bus(struct mmc_card *card)
>  {
> @@ -960,7 +981,7 @@ static int mmc_sdio_suspend(struct mmc_host *host)
>         mmc_claim_host(host);
>
>         if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host))
> -               sdio_disable_wide(host->card);
> +               sdio_disable_4bit_bus(host->card);
>
>         if (!mmc_card_keep_power(host)) {
>                 mmc_power_off(host);
> --
> 1.9.1
>

Kind regards
Uffe



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

  Powered by Linux