mmc: sdhci-msm: Update system suspend/resume callbacks of sdhci-msm platform driver
Subsystems (3)
PATCH v3 1/1 mmc: sdhci-msm: Update system suspend/resume callbacks of sdhci-msm platform driver
The existing suspend/resume callbacks of sdhci-msm driver are just gating/un-gating the clocks. During suspend cycle more can be done like disabling controller, disabling card detection, enabling wake-up events.
So updating the system pm callbacks for performing these extra actions besides controlling the clocks.
Changes since V2:
Removed disabling/enabling pwr-irq from system pm ops.
Changes since V1:
Invoking pm_runtime_force_suspend/resume instead of sdhci_msm_runtime_suepend/resume.
--- drivers/mmc/host/sdhci-msm.c | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-)
drivers/mmc/host/sdhci-msm.c +39 -2
@@ -2159,9 +2159,46 @@ static __maybe_unused int sdhci_msm_runtime_resume(struct device *dev)return 0 ; } +static int sdhci_msm_suspend (struct device *dev) +{ +struct sdhci_host *host =dev_get_drvdata (dev); +int ret; + +if (host->mmc->caps2 &MMC_CAP2_CQE ) { + ret =cqhci_suspend (host->mmc); +if (ret) +return ret; + } + + ret =sdhci_suspend_host (host); +if (ret) +return ret; + +return pm_runtime_force_suspend (dev); +} + +static int sdhci_msm_resume (struct device *dev) +{ +struct sdhci_host *host =dev_get_drvdata (dev); +int ret; + + ret =pm_runtime_force_resume (dev); +if (ret) +return ret; + + ret =sdhci_resume_host (host); +if (ret <0 ) +return ret; + +if (host->mmc->caps2 &MMC_CAP2_CQE ) + ret =cqhci_resume (host->mmc); + +return ret; +} +static const struct dev_pm_ops sdhci_msm_pm_ops = { - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, - pm_runtime_force_resume) + SET_SYSTEM_SLEEP_PM_OPS(sdhci_msm_suspend, + sdhci_msm_resume)SET_RUNTIME_PM_OPS (sdhci_msm_runtime_suspend, sdhci_msm_runtime_resume,NULL )
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Quoting Shaik Sajida Bhanu (2020-02-11 23:31:13)
Quoted 8 lines
The existing suspend/resume callbacks of sdhci-msm driver are just gating/un-gating the clocks. During suspend cycle more can be done like disabling controller, disabling card detection, enabling wake-up events.
So updating the system pm callbacks for performing these extra actions besides controlling the clocks.
Signed-off-by Shaik Sajida Bhanu <[email protected]>
Quoted 8 lines
Changes since V2:
Removed disabling/enabling pwr-irq from system pm ops.Changes since V1:
Invoking pm_runtime_force_suspend/resume instead of sdhci_msm_runtime_suepend/resume.
---
This triple dash should come right after the SoB line.
Adrian Hunter
maintainerQuoted 31 lines · Shaik Sajida Bhanu
The existing suspend/resume callbacks of sdhci-msm driver are just gating/un-gating the clocks. During suspend cycle more can be done like disabling controller, disabling card detection, enabling wake-up events.
So updating the system pm callbacks for performing these extra actions besides controlling the clocks.
Signed-off-by Shaik Sajida Bhanu <[email protected]>Changes since V2:
Removed disabling/enabling pwr-irq from system pm ops.Changes since V1:
Invoking pm_runtime_force_suspend/resume instead of sdhci_msm_runtime_suepend/resume.--- drivers/mmc/host/sdhci-msm.c | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-)drivers/mmc/host/sdhci-msm.c +4
-0@@ -2159,9 +2159,46 @@ static __maybe_unused int sdhci_msm_runtime_resume(struct device *dev)return 0 ; } +static int sdhci_msm_suspend (struct device *dev) +{ +struct sdhci_host *host =dev_get_drvdata (dev); +int ret;
drivers/mmc/host/sdhci-msm.c static __maybe_unused int sdhci_msm_runtime_resume(struct device *dev) · line 2175
Quoted 10 lines
drivers/mmc/host/sdhci-msm.c +10
-0+ +if (host->mmc->caps2 &MMC_CAP2_CQE ) { + ret =cqhci_suspend (host->mmc); +if (ret) +return ret; + } + + ret =sdhci_suspend_host (host); +if (ret) +return ret;
goto resume_cqhci;
drivers/mmc/host/sdhci-msm.c static __maybe_unused int sdhci_msm_runtime_resume(struct device *dev) · line 2177
Quoted 2 lines
drivers/mmc/host/sdhci-msm.c +2
-0+ +return pm_runtime_force_suspend (dev);
Ideally there should be an error path e.g.
ret = pm_runtime_force_suspend(dev); if (!ret) return ret; sdhci_resume_host() resume_cqhci: cqhci_resume() return ret;
Quoted 30 lines
drivers/mmc/host/sdhci-msm.c +23
-2+} + +static int sdhci_msm_resume (struct device *dev) +{ +struct sdhci_host *host =dev_get_drvdata (dev); +int ret; + + ret =pm_runtime_force_resume (dev); +if (ret) +return ret; + + ret =sdhci_resume_host (host); +if (ret <0 ) +return ret; + +if (host->mmc->caps2 &MMC_CAP2_CQE ) + ret =cqhci_resume (host->mmc); + +return ret; +} +static const struct dev_pm_ops sdhci_msm_pm_ops = { - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, - pm_runtime_force_resume) + SET_SYSTEM_SLEEP_PM_OPS(sdhci_msm_suspend, + sdhci_msm_resume)SET_RUNTIME_PM_OPS (sdhci_msm_runtime_suspend, sdhci_msm_runtime_resume,NULL )