[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAPDyKFogKcwssmQXSDQ+WFBP5iPMOHaK9RSAmRtn89MUnTJb=w@mail.gmail.com>
Date: Mon, 9 Jun 2025 16:24:47 +0200
From: Ulf Hansson <ulf.hansson@...aro.org>
To: ziniu.wang_1@....com
Cc: haibo.chen@....com, adrian.hunter@...el.com, linux-mmc@...r.kernel.org,
shawnguo@...nel.org, s.hauer@...gutronix.de, kernel@...gutronix.de,
festevam@...il.com, imx@...ts.linux.dev, s32@....com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
Frank Li <frank.li@....com>
Subject: Re: [PATCH] mmc: sdhci-esdhc-imx: do not change pinctrl state in
suspend if function irq is wakeup source
+ Frank
On Wed, 21 May 2025 at 05:30, <ziniu.wang_1@....com> wrote:
>
> From: Haibo Chen <haibo.chen@....com>
>
> pinctrl sleep state may config the pin mux to certain function to save
> power in system PM. But if usdhc is setting as wakeup source, like
> the card interrupt(SDIO) or card insert interrupt, it depends on the
> related pin mux configured to usdhc function pad.
> e.g. To support card interrupt(SDIO interrupt), it need the pin is
> config as usdhc DATA[1] function pin.
>
> Find the issue on imx93-11x11-evk board, SDIO WiFi in band interrupt
> can't wakeup system because the pinctrl sleep state config the DATA[1]
> pin as GPIO function.
>
> For this case, do not change the pinctrl state in suspend.
>
> Signed-off-by: Haibo Chen <haibo.chen@....com>
> Signed-off-by: Luke Wang <ziniu.wang_1@....com>
I have followed the discussion and I agree that there is room for
additional improvements (such as adding a new pinctrl state).
In any case, I still think $subject patch is the first step to take,
to fix the current problems. So, applied for next, thanks!
Note that, we may want this for stable kernels too, but perhaps easier
to manage that by manual backports as this depends on commit
676a83855614 ("mmc: host: sdhci-esdhc-imx: refactor the system PM
logic") too.
Kind regards
Uffe
> ---
> drivers/mmc/host/sdhci-esdhc-imx.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
> index 5f1c45b2bd5d..f206b562a6e3 100644
> --- a/drivers/mmc/host/sdhci-esdhc-imx.c
> +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
> @@ -2057,12 +2057,20 @@ static int sdhci_esdhc_suspend(struct device *dev)
> ret = sdhci_enable_irq_wakeups(host);
> if (!ret)
> dev_warn(dev, "Failed to enable irq wakeup\n");
> + } else {
> + /*
> + * For the device which works as wakeup source, no need
> + * to change the pinctrl to sleep state.
> + * e.g. For SDIO device, the interrupt share with data pin,
> + * but the pinctrl sleep state may config the data pin to
> + * other function like GPIO function to save power in PM,
> + * which finally block the SDIO wakeup function.
> + */
> + ret = pinctrl_pm_select_sleep_state(dev);
> + if (ret)
> + return ret;
> }
>
> - ret = pinctrl_pm_select_sleep_state(dev);
> - if (ret)
> - return ret;
> -
> ret = mmc_gpio_set_cd_wake(host->mmc, true);
>
> /*
> --
> 2.34.1
>
Powered by blists - more mailing lists