Hi Mark, On 03/03/2012 09:46 AM, Mark Brown wrote: > Since most of the work is already done by the core we just need to add > runtime suspend methods and tell the PM core that runtime PM is enabled > for this device. > > Signed-off-by: Mark Brown <broonie@xxxxxxxxxxxxxxxxxxxxxxxxxxx> > --- > drivers/mmc/host/sdhci-s3c.c | 28 ++++++++++++++++++++++++++++ > 1 files changed, 28 insertions(+), 0 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c > index 46152d6..6926ac9 100644 > --- a/drivers/mmc/host/sdhci-s3c.c > +++ b/drivers/mmc/host/sdhci-s3c.c > @@ -23,6 +23,7 @@ > #include <linux/of.h> > #include <linux/of_gpio.h> > #include <linux/pm.h> > +#include <linux/pm_runtime.h> > > #include <linux/mmc/host.h> > > @@ -721,6 +722,11 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) > if (pdata->host_caps2) > host->mmc->caps2 |= pdata->host_caps2; > > + pm_runtime_enable(&pdev->dev); > + pm_runtime_set_autosuspend_delay(&pdev->dev, 50); Could you explain why use 50ms? > + pm_runtime_use_autosuspend(&pdev->dev); > + pm_suspend_ignore_children(&pdev->dev, 1); Is there reason that ignore_children use to set the true? > + > ret = sdhci_add_host(host); > if (ret) { > dev_err(dev, "sdhci_add_host() failed\n"); > @@ -740,6 +746,8 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev) > > err_add_host: > release_resource(sc->ioarea); > + pm_runtime_forbid(&pdev->dev); > + pm_runtime_get_noresume(&pdev->dev); > kfree(sc->ioarea); > > err_req_regs: > @@ -784,6 +792,8 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev) > > sdhci_remove_host(host, 1); > > + pm_runtime_disable(&pdev->dev); > + > for (ptr = 0; ptr < 3; ptr++) { > if (sc->clk_bus[ptr]) { > clk_disable(sc->clk_bus[ptr]); > @@ -824,9 +834,27 @@ static int sdhci_s3c_resume(struct device *dev) > } > #endif > > +#ifdef CONFIG_PM_RUNTIME > +static int sdhci_s3c_runtime_suspend(struct device *dev) > +{ > + struct sdhci_host *host = dev_get_drvdata(dev); > + > + return sdhci_runtime_suspend_host(host); > +} > + > +static int sdhci_s3c_runtime_resume(struct device *dev) > +{ > + struct sdhci_host *host = dev_get_drvdata(dev); > + > + return sdhci_runtime_resume_host(host); > +} > +#endif > + > #ifdef CONFIG_PM > static const struct dev_pm_ops sdhci_s3c_pmops = { > SET_SYSTEM_SLEEP_PM_OPS(sdhci_s3c_suspend, sdhci_s3c_resume) > + SET_RUNTIME_PM_OPS(sdhci_s3c_runtime_suspend, sdhci_s3c_runtime_resume, > + NULL) > }; > > #define SDHCI_S3C_PMOPS (&sdhci_s3c_pmops) -- 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