All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: ulf.hansson@linaro.org, linux-kernel@vger.kernel.org,
	linux-mmc@vger.kernel.org, nicolas.ferre@atmel.com
Subject: Re: [PATCH v2 1/3] mmc: sdhci: introduce sdhci_compute_clock_config
Date: Thu, 7 Apr 2016 10:47:38 +0300	[thread overview]
Message-ID: <5706109A.1060907@intel.com> (raw)
In-Reply-To: <20160406150445.GA32232@odux.rfo.atmel.com>

On 06/04/16 18:04, Ludovic Desroches wrote:
> On Wed, Apr 06, 2016 at 03:37:28PM +0300, Adrian Hunter wrote:
>> On 04/04/16 18:27, Ludovic Desroches wrote:
>>> In order to remove the SDHCI_QUIRK2_NEED_DELAY_AFTER_INT_CLK_RST and to
>>> reduce code duplication, put the code relative to the SD clock
>>> configuration in a function which can be used by hosts for the
>>> implementation of the set_clock() callback.
>>>
>>> Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
>>> ---
>>>  drivers/mmc/host/sdhci.c | 33 ++++++++++++++++++++++-----------
>>>  drivers/mmc/host/sdhci.h |  1 +
>>>  2 files changed, 23 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
>>> index 6bd3d17..2c3dede 100644
>>> --- a/drivers/mmc/host/sdhci.c
>>> +++ b/drivers/mmc/host/sdhci.c
>>> @@ -1091,23 +1091,13 @@ static u16 sdhci_get_preset_value(struct sdhci_host *host)
>>>  	return preset;
>>>  }
>>>  
>>> -void sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
>>> +u16 sdhci_compute_clock_config(struct sdhci_host *host, unsigned int clock)
>>
>> The function name 'sdhci_compute_clock_config' seems a bit long.  How about
>> just sdhci_calc_clk.
> 
> Ok.
> 
>>
>> Also it needs to calculate 'actual_clock' too, so it needs to do that and
>> return the value.
>>
> 
> actual_clock is updated at the end of the function.
> 
> Which value has to be returned? actual_clock or clock configuration?

The function doesn't update the clock, so I don't think it should update
actual_clock either, just return it. i.e.

u16 sdhci_calc_clk(struct sdhci_host *host, unsigned int clock, unsigned int *actual_clock)
{
	...
	if (real_div)
		*actual_clock = (host->max_clk * clk_mul) / real_div;
	...
	return clk;
}

then

	clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);



> 
> Regards
> 
> Ludovic
> 
>>>  {
>>>  	int div = 0; /* Initialized for compiler warning */
>>>  	int real_div = div, clk_mul = 1;
>>>  	u16 clk = 0;
>>> -	unsigned long timeout;
>>>  	bool switch_base_clk = false;
>>>  
>>> -	host->mmc->actual_clock = 0;
>>> -
>>> -	sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
>>> -	if (host->quirks2 & SDHCI_QUIRK2_NEED_DELAY_AFTER_INT_CLK_RST)
>>> -		mdelay(1);
>>> -
>>> -	if (clock == 0)
>>> -		return;
>>> -
>>>  	if (host->version >= SDHCI_SPEC_300) {
>>>  		if (host->preset_enabled) {
>>>  			u16 pre_val;
>>> @@ -1188,6 +1178,27 @@ clock_set:
>>>  	clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT;
>>>  	clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN)
>>>  		<< SDHCI_DIVIDER_HI_SHIFT;
>>> +
>>> +	return clk;
>>> +}
>>> +EXPORT_SYMBOL_GPL(sdhci_compute_clock_config);
>>> +
>>> +void sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
>>> +{
>>> +	u16 clk;
>>> +	unsigned long timeout;
>>> +
>>> +	host->mmc->actual_clock = 0;
>>> +
>>> +	sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
>>> +	if (host->quirks2 & SDHCI_QUIRK2_NEED_DELAY_AFTER_INT_CLK_RST)
>>> +		mdelay(1);
>>> +
>>> +	if (clock == 0)
>>> +		return;
>>> +
>>> +	clk = sdhci_compute_clock_config(host, clock);
>>> +
>>>  	clk |= SDHCI_CLOCK_INT_EN;
>>>  	sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
>>>  
>>> diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
>>> index 0f39f4f..23ddd6e 100644
>>> --- a/drivers/mmc/host/sdhci.h
>>> +++ b/drivers/mmc/host/sdhci.h
>>> @@ -661,6 +661,7 @@ static inline bool sdhci_sdio_irq_enabled(struct sdhci_host *host)
>>>  	return !!(host->flags & SDHCI_SDIO_IRQ_ENABLED);
>>>  }
>>>  
>>> +u16 sdhci_compute_clock_config(struct sdhci_host *host, unsigned int clock);
>>>  void sdhci_set_clock(struct sdhci_host *host, unsigned int clock);
>>>  void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
>>>  		     unsigned short vdd);
>>>
>>
> 

  parent reply	other threads:[~2016-04-07  7:47 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-04 15:27 [PATCH v2 0/3] SDHCI_QUIRK2_NEED_DELAY_AFTER_INT_CLK_RST removal Ludovic Desroches
2016-04-04 15:27 ` Ludovic Desroches
2016-04-04 15:27 ` [PATCH v2 1/3] mmc: sdhci: introduce sdhci_compute_clock_config Ludovic Desroches
2016-04-04 15:27   ` Ludovic Desroches
2016-04-06 12:37   ` Adrian Hunter
2016-04-06 15:04     ` Ludovic Desroches
2016-04-06 15:04       ` Ludovic Desroches
2016-04-06 15:13       ` Ludovic Desroches
2016-04-06 15:13         ` Ludovic Desroches
2016-04-07  7:47       ` Adrian Hunter [this message]
2016-04-04 15:27 ` [PATCH v2 2/3] mmc: sdhci-of-at91: implement specific set_clock function Ludovic Desroches
2016-04-04 15:27   ` Ludovic Desroches
2016-04-04 15:27 ` [PATCH v2 3/3] mmc: sdhci: removal of SDHCI_QUIRK2_NEED_DELAY_AFTER_INT_CLK_RST Ludovic Desroches
2016-04-04 15:27   ` Ludovic Desroches

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=5706109A.1060907@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=ludovic.desroches@atmel.com \
    --cc=nicolas.ferre@atmel.com \
    --cc=ulf.hansson@linaro.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 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.