From: Chris Ball <cjb@laptop.org>
To: r66093@freescale.com
Cc: linux-mmc@vger.kernel.org,
Jerry Huang <Chang-Ming.Huang@freescale.com>,
Jiang Yutang <b14898@freescale.com>,
Wolfram Sang <w.sang@pengutronix.de>
Subject: Re: [PATCH 3/5 v3] ESDHC: Power management for ESDHC
Date: Mon, 02 Jan 2012 19:00:51 -0500 [thread overview]
Message-ID: <m2lipppscs.fsf@bob.laptop.org> (raw)
In-Reply-To: <1324958792-16742-1-git-send-email-r66093@freescale.com> (r66093@freescale.com's message of "Tue, 27 Dec 2011 12:06:32 +0800")
Hi,
Wolfram, do you have time to look at this? Looks like we need to expose
suspend/resume hooks to -pltfm users for this use case -- I don't think
any esdhc code should be in sdhci-pltfm.c. (I don't mind writing the
patch if you agree that that's the correct solution here.)
Jerry, some style comments below.
Thanks,
- Chris.
On Mon, Dec 26 2011, r66093@freescale.com wrote:
> From: Jerry Huang <Chang-Ming.Huang@freescale.com>
>
> For FSL ESDHC controllor, when enter the sleep, the controller will power off,
controller, entering sleep,
> therefore the register will lost its valuse, and driver should save value of
lose its values,
> register during suspend and used during resume.
registers restore them during resume.
>
> Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
> Signed-off-by: Jiang Yutang <b14898@freescale.com>
> CC: Chris Ball <cjb@laptop.org>
> ---
> changes for v2:
> - change the property to compatible for quirks
> changes for v3:
> - fix one compile error
>
> drivers/mmc/host/sdhci-pltfm.c | 21 ++++++++++++++++++++-
> 1 files changed, 20 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
> index 1c254b1..6791a2a 100644
> --- a/drivers/mmc/host/sdhci-pltfm.c
> +++ b/drivers/mmc/host/sdhci-pltfm.c
> @@ -53,6 +53,10 @@ static bool sdhci_of_wp_inverted(struct device_node *np)
> #endif /* CONFIG_PPC */
> }
>
> +#ifdef CONFIG_PM
> +static int sdhc_pmsaveproctlreg;
> +static u32 esdhc_proctl;
> +#endif
> void sdhci_get_of_property(struct platform_device *pdev)
> {
> struct device_node *np = pdev->dev.of_node;
> @@ -79,6 +83,11 @@ void sdhci_get_of_property(struct platform_device *pdev)
> || of_device_is_compatible(np, "fsl,mpc8536-esdhc"))
> host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL;
>
> +#ifdef CONFIG_PM
> + if (of_device_is_compatible(np, "fsl,p1022-esdhc"))
> + sdhc_pmsaveproctlreg = 1;
> +#endif
> +
> clk = of_get_property(np, "clock-frequency", &size);
> if (clk && size == sizeof(*clk) && *clk)
> pltfm_host->clock = be32_to_cpup(clk);
error: patch failed: drivers/mmc/host/sdhci-pltfm.c:79
error: drivers/mmc/host/sdhci-pltfm.c: patch does not apply
Needs to be rebased against mmc-next. But wait until we figure out
what to do with this patch.
> @@ -206,15 +215,25 @@ int sdhci_pltfm_suspend(struct platform_device *dev, pm_message_t state)
> {
> struct sdhci_host *host = platform_get_drvdata(dev);
>
> + if (sdhc_pmsaveproctlreg == 1)
> + esdhc_proctl = sdhci_readl(host, SDHCI_HOST_CONTROL);
> +
You can skip the "== 1".
> return sdhci_suspend_host(host, state);
> }
> EXPORT_SYMBOL_GPL(sdhci_pltfm_suspend);
>
> int sdhci_pltfm_resume(struct platform_device *dev)
> {
> + int ret;
> struct sdhci_host *host = platform_get_drvdata(dev);
>
> - return sdhci_resume_host(host);
> + host->ops->enable_dma(host);
(The indentation looks incorrect here.)
You shouldn't be calling an ops pointer without testing it first.
And you haven't explained why you're calling this unconditionally
for *every* -pltfm driver. How do you know it doesn't break one
of them?
> +
> + ret = mmc_resume_host(host->mmc);
> + if (sdhc_pmsaveproctlreg == 1)
> + sdhci_writel(host, esdhc_proctl, SDHCI_HOST_CONTROL);
> +
> + return ret;
== 1 not needed.
> }
> EXPORT_SYMBOL_GPL(sdhci_pltfm_resume);
> #endif /* CONFIG_PM */
Thanks,
- Chris.
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
One Laptop Per Child
next prev parent reply other threads:[~2012-01-03 0:01 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-27 4:06 [PATCH 3/5 v3] ESDHC: Power management for ESDHC r66093
2012-01-03 0:00 ` Chris Ball [this message]
2012-01-03 1:54 ` Wolfram Sang
2012-01-03 2:11 ` Chris Ball
2012-01-04 3:28 ` Huang Changming-R66093
2012-01-06 3:28 ` Huang Changming-R66093
2012-01-06 3:31 ` Huang Changming-R66093
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m2lipppscs.fsf@bob.laptop.org \
--to=cjb@laptop.org \
--cc=Chang-Ming.Huang@freescale.com \
--cc=b14898@freescale.com \
--cc=linux-mmc@vger.kernel.org \
--cc=r66093@freescale.com \
--cc=w.sang@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.