drivers/mmc/host/sdhci.c | 1 + 1 file changed, 1 insertion(+)
I met one suspend/resume issue with sdr104 capable sdio wifi card (with
"keep-power-in-suspend" set in DT property):
After resuming from suspend to ram, the sdio wifi card stops working.
Further debug shows that although ios shows the sdio card is at sdr104
mode, the voltage is still at 3V3. This is due to missing the calling
of ->start_signal_voltage_switch() in sdhci_resume_host().
Fix this issue by adding ->start_signal_voltage_switch() in
sdhci_resume_host(). This also matches what we do for
sdhci_runtime_resume_host().
Then the question is: why this issue hasn't reported and fixed for so
long time. IMHO, several reasons: Some host controllers just kicks off
the runtime resume for system resume, so it benefits from the well
supported runtime pm code; Some platforms just use the old sdio wifi
card which doesn't need signal voltage switch at all, the default
voltage is 3v3 after resuming.
Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
---
drivers/mmc/host/sdhci.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 605be55f8d2d..e3bf901b10aa 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -3836,6 +3836,7 @@ int sdhci_resume_host(struct sdhci_host *host)
host->pwr = 0;
host->clock = 0;
host->reinit_uhs = true;
+ mmc->ops->start_signal_voltage_switch(mmc, &mmc->ios);
mmc->ops->set_ios(mmc, &mmc->ios);
} else {
sdhci_init(host, (mmc->pm_flags & MMC_PM_KEEP_POWER));
--
2.53.0
On 20/05/2026 16:37, Jisheng Zhang wrote:
> I met one suspend/resume issue with sdr104 capable sdio wifi card (with
> "keep-power-in-suspend" set in DT property):
> After resuming from suspend to ram, the sdio wifi card stops working.
> Further debug shows that although ios shows the sdio card is at sdr104
> mode, the voltage is still at 3V3. This is due to missing the calling
> of ->start_signal_voltage_switch() in sdhci_resume_host().
>
> Fix this issue by adding ->start_signal_voltage_switch() in
> sdhci_resume_host(). This also matches what we do for
> sdhci_runtime_resume_host().
>
> Then the question is: why this issue hasn't reported and fixed for so
> long time. IMHO, several reasons: Some host controllers just kicks off
> the runtime resume for system resume, so it benefits from the well
> supported runtime pm code; Some platforms just use the old sdio wifi
> card which doesn't need signal voltage switch at all, the default
> voltage is 3v3 after resuming.
>
> Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
Needs a fixes tag, otherwise:
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
> drivers/mmc/host/sdhci.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index 605be55f8d2d..e3bf901b10aa 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -3836,6 +3836,7 @@ int sdhci_resume_host(struct sdhci_host *host)
> host->pwr = 0;
> host->clock = 0;
> host->reinit_uhs = true;
> + mmc->ops->start_signal_voltage_switch(mmc, &mmc->ios);
> mmc->ops->set_ios(mmc, &mmc->ios);
> } else {
> sdhci_init(host, (mmc->pm_flags & MMC_PM_KEEP_POWER));
© 2016 - 2026 Red Hat, Inc.