All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matt Fleming <matt@console-pimps.org>
To: Jaehoon Chung <jh80.chung@samsung.com>
Cc: linux-mmc@vger.kernel.org,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Kukjin Kim <kgene.kim@samsung.com>, Chris Ball <cjb@laptop.org>
Subject: Re: [RFC RESEND] sdhci-s3c: support clock enable/disable (clock-gating)
Date: Fri, 17 Sep 2010 14:40:31 +0100	[thread overview]
Message-ID: <20100917134031.GA11462@console-pimps.org> (raw)
In-Reply-To: <4C91BD5A.1040804@samsung.com>

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?

  reply	other threads:[~2010-09-17 13:40 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 [this message]
2010-09-25  8:21   ` Jae hoon Chung
2010-09-28  5:29     ` Jaehoon Chung
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=20100917134031.GA11462@console-pimps.org \
    --to=matt@console-pimps.org \
    --cc=akpm@linux-foundation.org \
    --cc=cjb@laptop.org \
    --cc=jh80.chung@samsung.com \
    --cc=kgene.kim@samsung.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-mmc@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    /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.