Suspend/resume is working always enable regulator after resuming. (if there is host->vmmc) I assume that if regulator is enabled, card is inserted. Then We need to restore "vmmc". Signed-off-by: Jaehoon Chung <jh80.chung@xxxxxxxxxxx> Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx> --- drivers/mmc/host/sdhci.c | 8 +++++--- include/linux/mmc/sdhci.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 9e15f41..70cbbd6 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1663,8 +1663,10 @@ int sdhci_suspend_host(struct sdhci_host *host, pm_message_t state) free_irq(host->irq, host); - if (host->vmmc) + if (host->vmmc && regulator_is_enabled(host->vmmc)) { ret = regulator_disable(host->vmmc); + host->restore_vmmc = true; + } return ret; } @@ -1675,8 +1677,8 @@ int sdhci_resume_host(struct sdhci_host *host) { int ret; - if (host->vmmc) { - int ret = regulator_enable(host->vmmc); + if (host->vmmc && host->restore_vmmc) { + ret = regulator_enable(host->vmmc); if (ret) return ret; } diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h index 83bd9f7..1c38261 100644 --- a/include/linux/mmc/sdhci.h +++ b/include/linux/mmc/sdhci.h @@ -92,6 +92,7 @@ struct sdhci_host { const struct sdhci_ops *ops; /* Low level hw interface */ struct regulator *vmmc; /* Power regulator */ + bool restore_vmmc; /* Restore vmmc */ /* Internal data */ struct mmc_host *mmc; /* MMC structure */ -- -- 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