mmc: tegra: add sdhci tegra suspend and resume
This patch adds suspend and resume PM ops for tegra SDHCI. Acked-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Sowjanya Komatineni <skomatineni@nvidia.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
c07a48c265
commit
71c733c4e1
|
@ -1611,11 +1611,67 @@ static int sdhci_tegra_remove(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
static int __maybe_unused sdhci_tegra_suspend(struct device *dev)
|
||||||
|
{
|
||||||
|
struct sdhci_host *host = dev_get_drvdata(dev);
|
||||||
|
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
|
||||||
|
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) {
|
||||||
|
cqhci_resume(host->mmc);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
clk_disable_unprepare(pltfm_host->clk);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __maybe_unused sdhci_tegra_resume(struct device *dev)
|
||||||
|
{
|
||||||
|
struct sdhci_host *host = dev_get_drvdata(dev);
|
||||||
|
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = clk_prepare_enable(pltfm_host->clk);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = sdhci_resume_host(host);
|
||||||
|
if (ret)
|
||||||
|
goto disable_clk;
|
||||||
|
|
||||||
|
if (host->mmc->caps2 & MMC_CAP2_CQE) {
|
||||||
|
ret = cqhci_resume(host->mmc);
|
||||||
|
if (ret)
|
||||||
|
goto suspend_host;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
suspend_host:
|
||||||
|
sdhci_suspend_host(host);
|
||||||
|
disable_clk:
|
||||||
|
clk_disable_unprepare(pltfm_host->clk);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static SIMPLE_DEV_PM_OPS(sdhci_tegra_dev_pm_ops, sdhci_tegra_suspend,
|
||||||
|
sdhci_tegra_resume);
|
||||||
|
|
||||||
static struct platform_driver sdhci_tegra_driver = {
|
static struct platform_driver sdhci_tegra_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "sdhci-tegra",
|
.name = "sdhci-tegra",
|
||||||
.of_match_table = sdhci_tegra_dt_match,
|
.of_match_table = sdhci_tegra_dt_match,
|
||||||
.pm = &sdhci_pltfm_pmops,
|
.pm = &sdhci_tegra_dev_pm_ops,
|
||||||
},
|
},
|
||||||
.probe = sdhci_tegra_probe,
|
.probe = sdhci_tegra_probe,
|
||||||
.remove = sdhci_tegra_remove,
|
.remove = sdhci_tegra_remove,
|
||||||
|
|
Loading…
Reference in New Issue