diff options
author | Colin Cross <ccross@android.com> | 2011-05-05 21:47:55 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:37:08 -0800 |
commit | 285af9765fa89abd47c7820ca5ce415efeb9329e (patch) | |
tree | 2fefcec9d82b18d13769fc421c49b2ba6badf6c2 /drivers/mmc/host/sdhci-pltfm.c | |
parent | 1b83c0bb641be978f0b03c170123063b99cfaf1b (diff) |
mmc: host: sdhci-pltfm: Add suspend and resume hooks to sdhci platform
Change-Id: I062fbe91d8af14366a92af1a27e9dab49869905c
Signed-off-by: Colin Cross <ccross@android.com>
Diffstat (limited to 'drivers/mmc/host/sdhci-pltfm.c')
-rw-r--r-- | drivers/mmc/host/sdhci-pltfm.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c index 6414efeddca0..1179f1be4318 100644 --- a/drivers/mmc/host/sdhci-pltfm.c +++ b/drivers/mmc/host/sdhci-pltfm.c @@ -196,16 +196,42 @@ EXPORT_SYMBOL_GPL(sdhci_pltfm_unregister); int sdhci_pltfm_suspend(struct platform_device *dev, pm_message_t state) { struct sdhci_host *host = platform_get_drvdata(dev); + int ret; + + ret = sdhci_suspend_host(host, state); + if (ret) { + dev_err(&dev->dev, "suspend failed, error = %d\n", ret); + return ret; + } - return sdhci_suspend_host(host, state); + if (host->ops && host->ops->suspend) + ret = host->ops->suspend(host, state); + if (ret) { + dev_err(&dev->dev, "suspend hook failed, error = %d\n", ret); + sdhci_resume_host(host); + } + + return ret; } EXPORT_SYMBOL_GPL(sdhci_pltfm_suspend); int sdhci_pltfm_resume(struct platform_device *dev) { struct sdhci_host *host = platform_get_drvdata(dev); + int ret = 0; + + if (host->ops && host->ops->resume) + ret = host->ops->resume(host); + if (ret) { + dev_err(&dev->dev, "resume hook failed, error = %d\n", ret); + return ret; + } - return sdhci_resume_host(host); + ret = sdhci_resume_host(host); + if (ret) + dev_err(&dev->dev, "resume failed, error = %d\n", ret); + + return ret; } EXPORT_SYMBOL_GPL(sdhci_pltfm_resume); #endif /* CONFIG_PM */ |