From: Jaehoon Chung <jh80.chung@samsung.com>
To: Chris Ball <cjb@laptop.org>
Cc: Matt Fleming <matt@console-pimps.org>,
Jaehoon Chung <jh80.chung@samsung.com>,
linux-mmc@vger.kernel.org,
Kyungmin Park <kyungmin.park@samsung.com>,
Andrew Morton <akpm@linux-foundation.org>,
Marek Szyprowski <m.szyprowski@samsung.com>
Subject: Re: [RFC RESEND] sdhci-s3c: support clock enable/disable (clock-gating)
Date: Tue, 28 Sep 2010 14:29:39 +0900 [thread overview]
Message-ID: <4CA17D43.1030004@samsung.com> (raw)
In-Reply-To: <AANLkTi=HWUy7Fm7mKPGWT4m0kzKJhEUE8C=Yw2NN1Z5J@mail.gmail.com>
Jae hoon Chung wrote:
> 2010/9/17 Matt Fleming <matt@console-pimps.org>:
>> On Thu, Sep 16, 2010 at 03:46:50PM +0900, Jaehoon Chung wrote:
>>> Hi all,
>>> This is a RFC patch that support clock-gating for saving power consumption.
>>> I found mmc_host_enable/mmc_host_disable function in core.c
>>> (using MMC_CAP_DSIABLE. i think that use when host enable/disable)
>>> So, i used that functions and implemented some functions in sdhci-s3c.c & sdhci.c
>>>
>>> i want any feedback. how do you think about this patch?
>>> Plz let me know...
>>>
>>> Thank you all
>>>
>>> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>>> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
>>>
>>> ---
>>> drivers/mmc/host/sdhci-s3c.c | 36 ++++++++++++++++++++++++++++++++++++
>>> drivers/mmc/host/sdhci.c | 30 ++++++++++++++++++++++++++++++
>>> drivers/mmc/host/sdhci.h | 4 ++++
>>> 3 files changed, 70 insertions(+), 0 deletions(-)
>> [...]
>>
>>> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
>>> index 401527d..fa2e55d 100644
>>> --- a/drivers/mmc/host/sdhci.c
>>> +++ b/drivers/mmc/host/sdhci.c
>>> @@ -1245,7 +1245,37 @@ out:
>>> spin_unlock_irqrestore(&host->lock, flags);
>>> }
>>>
>>> +static int sdhci_enable_clk(struct mmc_host *mmc)
>>> +{
>>> + struct sdhci_host *host = mmc_priv(mmc);
>>> + int ret = 0;
>>> +
>>> + if (host->old_clock != 0 && host->clock == 0) {
>>> + if (host->ops->enable)
>>> + ret = host->ops->enable(host);
>>> + sdhci_set_clock(host, host->old_clock);
>>> + }
>>> +
>>> + return ret;
>>> +}
>>> +
>>> +static int sdhci_disable_clk(struct mmc_host *mmc, int lazy)
>>> +{
>>> + struct sdhci_host *host = mmc_priv(mmc);
>>> + int ret = 0;
>>> +
>>> + if (host->clock != 0) {
>>> + host->old_clock = host->clock;
>>> + sdhci_set_clock(host, 0);
>>> + if (host->ops->disable)
>>> + ret = host->ops->disable(host, lazy);
>>> + }
>>> + return ret;
>>> +}
>>> +
>>> static const struct mmc_host_ops sdhci_ops = {
>>> + .enable = sdhci_enable_clk,
>>> + .disable = sdhci_disable_clk,
>>> .request = sdhci_request,
>>> .set_ios = sdhci_set_ios,
>>> .get_ro = sdhci_get_ro,
>>> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
>>> index d316bc7..0c6f143 100644
>>> --- a/drivers/mmc/host/sdhci.h
>>> +++ b/drivers/mmc/host/sdhci.h
>>> @@ -278,6 +278,8 @@ struct sdhci_host {
>>> unsigned int timeout_clk; /* Timeout freq (KHz) */
>>>
>>> unsigned int clock; /* Current clock (MHz) */
>>> + unsigned int old_clock; /* Old clock (MHz) */
>>> + unsigned int clk_cnt; /* Clock user count */
>>> u8 pwr; /* Current voltage */
>>>
>>> struct mmc_request *mrq; /* Current request */
>>> @@ -323,6 +325,8 @@ struct sdhci_ops {
>>> unsigned int (*get_max_clock)(struct sdhci_host *host);
>>> unsigned int (*get_min_clock)(struct sdhci_host *host);
>>> unsigned int (*get_timeout_clock)(struct sdhci_host *host);
>>> + int (*enable)(struct sdhci_host *host);
>>> + int (*disable)(struct sdhci_host *host, int lazy);
>>> };
>>>
>>> #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
>> I could have misunderstood something, but do you really need this new
>> 'old_clock' member? Is the previous clock value not stored in
>> host->ios.clock?
>
> Thanks Matt for your comment.
> if host->ios.clock set zero, i think that need previous value (for
> example 52MHz..)
> So i add 'old_clock' member...i will test, after removed 'old_clock'
>
> anyother doubt? and problem?
> Thanks
>
Hi Chris.
I want to know how do you think about this patch.
If you have any doubt in this patch, let me know plz.
Thanks
Jaehoon Chung
next prev parent reply other threads:[~2010-09-28 5:29 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-16 6:46 [RFC RESEND] sdhci-s3c: support clock enable/disable (clock-gating) Jaehoon Chung
2010-09-17 13:40 ` Matt Fleming
2010-09-25 8:21 ` Jae hoon Chung
2010-09-28 5:29 ` Jaehoon Chung [this message]
2010-09-29 23:37 ` Chris Ball
2010-09-30 3:42 ` Nicolas Pitre
2010-09-30 4:09 ` Chris Ball
2010-09-30 4:31 ` Kyungmin Park
2010-09-30 7:22 ` Linus Walleij
2010-09-30 13:30 ` Nicolas Pitre
2010-10-05 2:08 ` Chris Ball
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=4CA17D43.1030004@samsung.com \
--to=jh80.chung@samsung.com \
--cc=akpm@linux-foundation.org \
--cc=cjb@laptop.org \
--cc=kyungmin.park@samsung.com \
--cc=linux-mmc@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=matt@console-pimps.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox