All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Jones <lee.jones@linaro.org>
To: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Cc: broonie@kernel.org, sameo@linux.intel.com, lgirdwood@gmail.com,
	patches@opensource.wolfsonmicro.com,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/4] mfd: arizona: Factor out SYSCLK enable from wm5102 hardware patch
Date: Mon, 23 Mar 2015 13:52:13 +0000	[thread overview]
Message-ID: <20150323135213.GH24804@x1> (raw)
In-Reply-To: <1426608672-4895-1-git-send-email-ckeepax@opensource.wolfsonmicro.com>

On Tue, 17 Mar 2015, Charles Keepax wrote:

> wm5102 applies a custom hardware boot sequence, for this the SYSCLK
> needs to be enabled. This patch factors out the code that enables
> SYSCLK for this sequence such that it can be used for other boot time
> operations that require SYSCLK.
> 
> Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
> ---
> 
> Changes since v1:
>  - Added some comments in patch 4 to explain the exact regulator voltage
>    ranges
>  - Removed the reset patch, whilst I work on the suggestions by Mark, the
>    rest of the series is useful in its own right and doesn't need to be
>    blocked by that
> 
> Thanks,
> Charles
> 
>  drivers/mfd/arizona-core.c |   48 ++++++++++++++++++++++++++++---------------
>  1 files changed, 31 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
> index 6ca6dfa..ef1f8aa 100644
> --- a/drivers/mfd/arizona-core.c
> +++ b/drivers/mfd/arizona-core.c
> @@ -250,7 +250,8 @@ static int arizona_wait_for_boot(struct arizona *arizona)
>  	return ret;
>  }
>  
> -static int arizona_apply_hardware_patch(struct arizona* arizona)
> +static int arizona_exec_with_sysclk(struct arizona *arizona,
> +				    int (*exec)(struct arizona *))
>  {
>  	unsigned int fll, sysclk;
>  	int ret, err;
> @@ -292,23 +293,8 @@ static int arizona_apply_hardware_patch(struct arizona* arizona)
>  		goto err_fll;
>  	}
>  
> -	/* Start the write sequencer and wait for it to finish */
> -	ret = regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_0,
> -			ARIZONA_WSEQ_ENA | ARIZONA_WSEQ_START | 160);
> -	if (ret != 0) {
> -		dev_err(arizona->dev, "Failed to start write sequencer: %d\n",
> -			ret);
> -		goto err_sysclk;
> -	}
> -	ret = arizona_poll_reg(arizona, 5, ARIZONA_WRITE_SEQUENCER_CTRL_1,
> -			       ARIZONA_WSEQ_BUSY, 0);
> -	if (ret != 0) {
> -		regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_0,
> -				ARIZONA_WSEQ_ABORT);
> -		ret = -ETIMEDOUT;
> -	}
> +	ret = exec(arizona);
>  
> -err_sysclk:
>  	err = regmap_write(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, sysclk);
>  	if (err != 0) {
>  		dev_err(arizona->dev,
> @@ -330,6 +316,34 @@ err_fll:
>  		return err;
>  }
>  
> +static int arizona_hardware_patch_wseq(struct arizona *arizona)
> +{
> +	int ret;
> +
> +	/* Start the write sequencer and wait for it to finish */
> +	ret = regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_0,
> +			ARIZONA_WSEQ_ENA | ARIZONA_WSEQ_START | 160);
> +	if (ret != 0) {
> +		dev_err(arizona->dev, "Failed to start write sequencer: %d\n",
> +			ret);
> +		return ret;
> +	}
> +	ret = arizona_poll_reg(arizona, 5, ARIZONA_WRITE_SEQUENCER_CTRL_1,
> +			       ARIZONA_WSEQ_BUSY, 0);
> +	if (ret != 0) {
> +		regmap_write(arizona->regmap, ARIZONA_WRITE_SEQUENCER_CTRL_0,
> +				ARIZONA_WSEQ_ABORT);
> +		ret = -ETIMEDOUT;
> +	}
> +
> +	return ret;
> +}
> +
> +static inline int arizona_apply_hardware_patch(struct arizona *arizona)
> +{
> +	return arizona_exec_with_sysclk(arizona, arizona_hardware_patch_wseq);

Not sure I like this much.

What's the reason for over-complicating this?  Can you just:

arizona_exec_with_sysclk(arizona);
arizona_hardware_patch_wseq(arizona); 

... or if you need that call to be in the middle, split the calls up
further.

> +}
> +
>  #ifdef CONFIG_PM
>  static int arizona_runtime_resume(struct device *dev)
>  {

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

  parent reply	other threads:[~2015-03-23 13:52 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-17 16:11 [PATCH v2 1/4] mfd: arizona: Factor out SYSCLK enable from wm5102 hardware patch Charles Keepax
2015-03-17 16:11 ` [PATCH v2 2/4] mfd: wm5110: Add register patch required for low power sleep Charles Keepax
2015-03-23 14:13   ` Lee Jones
2015-03-23 14:22     ` Charles Keepax
2015-03-23 14:50       ` Lee Jones
2015-03-17 16:11 ` [PATCH v2 3/4] regulator: arizona-ldo1: Add additional supported voltage Charles Keepax
2015-03-17 16:11 ` [PATCH v2 4/4] mfd: wm5110: Set DCVDD voltage to 1.175V before entering sleep mode Charles Keepax
2015-03-17 17:06   ` Mark Brown
2015-03-23 14:15   ` Lee Jones
2015-03-23 13:52 ` Lee Jones [this message]
2015-03-23 14:36   ` [PATCH v2 1/4] mfd: arizona: Factor out SYSCLK enable from wm5102 hardware patch Charles Keepax
2015-03-23 14:48     ` Lee Jones

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=20150323135213.GH24804@x1 \
    --to=lee.jones@linaro.org \
    --cc=broonie@kernel.org \
    --cc=ckeepax@opensource.wolfsonmicro.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@opensource.wolfsonmicro.com \
    --cc=sameo@linux.intel.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.