devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Krzysztof Kozlowski <krzk@kernel.org>
To: Sylwester Nawrocki <s.nawrocki@samsung.com>
Cc: broonie@kernel.org, lgirdwood@gmail.com,
	devicetree@vger.kernel.org, robh+dt@kernel.org,
	linux-samsung-soc@vger.kernel.org, b.zolnierkie@samsung.com,
	alsa-devel@alsa-project.org
Subject: Re: [PATCH] ASoC: samsung: odroid: Drop requirement of clocks in the sound node
Date: Mon, 7 Aug 2017 20:56:23 +0200	[thread overview]
Message-ID: <20170807185623.jwitnpcaay4wrv6a@kozik-lap> (raw)
In-Reply-To: <1501844297-22842-1-git-send-email-s.nawrocki@samsung.com>

On Fri, Aug 04, 2017 at 12:58:17PM +0200, Sylwester Nawrocki wrote:
> As suggested in reviews the requirement of clocks in the 'sound' node
> is dropped and instead a leaf clock is used to configure frequency
> of the audio root clock PLL. This can work now after the clock tree
> definitions have been updated to allow clock rate setting propagation
> on the path from the I2S controller up to the EPLL.
> 
> This patch also lowers the CODEC master clock frequency so as
> to not exceed the maximum allowed 60 MHz at maximum audio sampling
> rates.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
>  .../devicetree/bindings/sound/samsung,odroid.txt   |  6 ---
>  sound/soc/samsung/odroid.c                         | 44 +++++++++++++++-------
>  2 files changed, 30 insertions(+), 20 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/sound/samsung,odroid.txt b/Documentation/devicetree/bindings/sound/samsung,odroid.txt
> index c30934d..625b1b1 100644
> --- a/Documentation/devicetree/bindings/sound/samsung,odroid.txt
> +++ b/Documentation/devicetree/bindings/sound/samsung,odroid.txt
> @@ -7,9 +7,6 @@ Required properties:
>   - model - the user-visible name of this sound complex
>   - clocks - should contain entries matching clock names in the clock-names
>      property
> - - clock-names - should contain following entries:
> -    - "epll" - indicating the EPLL output clock
> -    - "i2s_rclk" - indicating the RCLK (root) clock of the I2S0 controller
>   - samsung,audio-widgets - this property specifies off-codec audio elements
>     like headphones or speakers, for details see widgets.txt
>   - samsung,audio-routing - a list of the connections between audio
> @@ -46,9 +43,6 @@ sound {
>  		"IN1", "Mic Jack",
>  		"Mic Jack", "MICBIAS";
>  
> -	clocks = <&clock CLK_FOUT_EPLL>, <&i2s0 CLK_I2S_RCLK_SRC>;
> -	clock-names = "epll", "sclk_i2s";
> -
>  	cpu {
>  		sound-dai = <&i2s0 0>;
>  	};
> diff --git a/sound/soc/samsung/odroid.c b/sound/soc/samsung/odroid.c
> index 0834319..44b6de5 100644
> --- a/sound/soc/samsung/odroid.c
> +++ b/sound/soc/samsung/odroid.c
> @@ -19,8 +19,8 @@ struct odroid_priv {
>  	struct snd_soc_card card;
>  	struct snd_soc_dai_link dai_link;
>  
> -	struct clk *pll;
> -	struct clk *rclk;
> +	struct clk *clk_i2s_bus;
> +	struct clk *sclk_i2s;
>  };
>  
>  static int odroid_card_startup(struct snd_pcm_substream *substream)
> @@ -58,13 +58,18 @@ static int odroid_card_hw_params(struct snd_pcm_substream *substream,
>  		return -EINVAL;
>  	}
>  
> -	ret = clk_set_rate(priv->pll, pll_freq + 1);
> +	ret = clk_set_rate(priv->clk_i2s_bus, pll_freq / 2 + 1);
>  	if (ret < 0)
>  		return ret;
>  
> -	rclk_freq = params_rate(params) * 256 * 4;
> +	/*
> +	 *  We add 1 to the rclk_freq value in order to avoid too low clock
> +	 *  frequency values due to the EPLL output frequency not being exact
> +	 *  multiple of the audio sampling rate.
> +	 */
> +	rclk_freq = params_rate(params) * 256 + 1;
>  
> -	ret = clk_set_rate(priv->rclk, rclk_freq);
> +	ret = clk_set_rate(priv->sclk_i2s, rclk_freq);
>  	if (ret < 0)
>  		return ret;
>  
> @@ -118,14 +123,6 @@ static int odroid_audio_probe(struct platform_device *pdev)
>  
>  	snd_soc_card_set_drvdata(card, priv);
>  
> -	priv->pll = devm_clk_get(dev, "epll");
> -	if (IS_ERR(priv->pll))
> -		return PTR_ERR(priv->pll);
> -
> -	priv->rclk = devm_clk_get(dev, "i2s_rclk");
> -	if (IS_ERR(priv->rclk))
> -		return PTR_ERR(priv->rclk);
> -
>  	ret = snd_soc_of_parse_card_name(card, "model");
>  	if (ret < 0)
>  		return ret;
> @@ -171,14 +168,31 @@ static int odroid_audio_probe(struct platform_device *pdev)
>  	link->name = "Primary";
>  	link->stream_name = link->name;
>  
> +

One blank line too much but beside that:

Acked-by: Krzysztof Kozlowski <krzk@kernel.org>

Best regards,
Krzysztof

> +	priv->sclk_i2s = of_clk_get_by_name(link->cpu_of_node, "i2s_opclk1");
> +	if (IS_ERR(priv->sclk_i2s)) {
> +		ret = PTR_ERR(priv->sclk_i2s);
> +		goto err_put_i2s_n;
> +	}
> +
> +	priv->clk_i2s_bus = of_clk_get_by_name(link->cpu_of_node, "iis");
> +	if (IS_ERR(priv->clk_i2s_bus)) {
> +		ret = PTR_ERR(priv->clk_i2s_bus);
> +		goto err_put_sclk;
> +	}
> +
>  	ret = devm_snd_soc_register_card(dev, card);
>  	if (ret < 0) {
>  		dev_err(dev, "snd_soc_register_card() failed: %d\n", ret);
> -		goto err_put_i2s_n;
> +		goto err_put_clk_i2s;
>  	}
>  
>  	return 0;
>  
> +err_put_clk_i2s:
> +	clk_put(priv->clk_i2s_bus);
> +err_put_sclk:
> +	clk_put(priv->sclk_i2s);
>  err_put_i2s_n:
>  	of_node_put(link->cpu_of_node);
>  err_put_codec_n:
> @@ -192,6 +206,8 @@ static int odroid_audio_remove(struct platform_device *pdev)
>  
>  	of_node_put(priv->dai_link.cpu_of_node);
>  	odroid_put_codec_of_nodes(&priv->dai_link);
> +	clk_put(priv->sclk_i2s);
> +	clk_put(priv->clk_i2s_bus);
>  
>  	return 0;
>  }
> -- 
> 1.9.1
> 

  reply	other threads:[~2017-08-07 18:56 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20170804105854epcas2p30ed120bc4bcb51979a880f44ffe3aca6@epcas2p3.samsung.com>
2017-08-04 10:58 ` [PATCH] ASoC: samsung: odroid: Drop requirement of clocks in the sound node Sylwester Nawrocki
2017-08-07 18:56   ` Krzysztof Kozlowski [this message]
2017-08-08 11:06   ` Applied "ASoC: samsung: odroid: Drop requirement of clocks in the sound node" to the asoc tree Mark Brown

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=20170807185623.jwitnpcaay4wrv6a@kozik-lap \
    --to=krzk@kernel.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=b.zolnierkie@samsung.com \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=s.nawrocki@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).