From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jaehoon Chung Subject: Re: [PATCH 2/2] mmc: sdhci-s3c: Enable runtime power management Date: Mon, 05 Mar 2012 19:48:42 +0900 Message-ID: <4F549A0A.5020402@samsung.com> References: <4F51697C.40408@samsung.com> <1330735602-22409-1-git-send-email-broonie@opensource.wolfsonmicro.com> <1330735602-22409-2-git-send-email-broonie@opensource.wolfsonmicro.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Return-path: Received: from mailout1.samsung.com ([203.254.224.24]:44579 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756480Ab2CEKsu (ORCPT ); Mon, 5 Mar 2012 05:48:50 -0500 In-reply-to: <1330735602-22409-2-git-send-email-broonie@opensource.wolfsonmicro.com> Sender: linux-mmc-owner@vger.kernel.org List-Id: linux-mmc@vger.kernel.org To: Mark Brown Cc: Kukjin Kim , Chris Ball , linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mmc@vger.kernel.org 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 > --- > 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 > #include > #include > +#include > > #include > > @@ -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) From mboxrd@z Thu Jan 1 00:00:00 1970 From: jh80.chung@samsung.com (Jaehoon Chung) Date: Mon, 05 Mar 2012 19:48:42 +0900 Subject: [PATCH 2/2] mmc: sdhci-s3c: Enable runtime power management In-Reply-To: <1330735602-22409-2-git-send-email-broonie@opensource.wolfsonmicro.com> References: <4F51697C.40408@samsung.com> <1330735602-22409-1-git-send-email-broonie@opensource.wolfsonmicro.com> <1330735602-22409-2-git-send-email-broonie@opensource.wolfsonmicro.com> Message-ID: <4F549A0A.5020402@samsung.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org 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 > --- > 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 > #include > #include > +#include > > #include > > @@ -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)