| From 44d86b464a7e968b01df91eb8acc37167db5c415 Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Fri, 7 Feb 2014 00:53:06 -0800 |
| Subject: ASoC: rsnd: use device dependency clock |
| |
| Current R-Car sound driver is using device |
| independent audio clock, but it is not good |
| design for DT support. |
| This patch adds device dependent clock support. |
| But, there are some platform which is using |
| independent audio clock. |
| It is still supported at this point, |
| but it will be removed soon. |
| |
| Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit 8691d0748e566f8708f7a9139e760134f5dc3130) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| sound/soc/sh/rcar/adg.c | 40 +++++++++++++++++++++++++++++++++++----- |
| 1 file changed, 35 insertions(+), 5 deletions(-) |
| |
| diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c |
| index 821791e15d04..8d3a82ef2db5 100644 |
| --- a/sound/soc/sh/rcar/adg.c |
| +++ b/sound/soc/sh/rcar/adg.c |
| @@ -385,8 +385,9 @@ int rsnd_adg_probe(struct platform_device *pdev, |
| { |
| struct rsnd_adg *adg; |
| struct device *dev = rsnd_priv_to_dev(priv); |
| - struct clk *clk; |
| + struct clk *clk, *clk_orig; |
| int i; |
| + bool use_old_style = false; |
| |
| adg = devm_kzalloc(dev, sizeof(*adg), GFP_KERNEL); |
| if (!adg) { |
| @@ -394,10 +395,39 @@ int rsnd_adg_probe(struct platform_device *pdev, |
| return -ENOMEM; |
| } |
| |
| - adg->clk[CLKA] = clk_get(NULL, "audio_clk_a"); |
| - adg->clk[CLKB] = clk_get(NULL, "audio_clk_b"); |
| - adg->clk[CLKC] = clk_get(NULL, "audio_clk_c"); |
| - adg->clk[CLKI] = clk_get(NULL, "audio_clk_internal"); |
| + clk_orig = clk_get(dev, NULL); |
| + adg->clk[CLKA] = clk_get(dev, "clk_a"); |
| + adg->clk[CLKB] = clk_get(dev, "clk_b"); |
| + adg->clk[CLKC] = clk_get(dev, "clk_c"); |
| + adg->clk[CLKI] = clk_get(dev, "clk_i"); |
| + |
| + /* |
| + * It request device dependent audio clock. |
| + * But above all clks will indicate rsnd module clock |
| + * if platform doesn't it |
| + */ |
| + for_each_rsnd_clk(clk, adg, i) { |
| + if (clk_orig == clk) { |
| + dev_warn(dev, |
| + "doesn't have device dependent clock, use independent clock\n"); |
| + use_old_style = true; |
| + break; |
| + } |
| + } |
| + |
| + /* |
| + * note: |
| + * these exist in order to keep compatible with |
| + * platform which has device independent audio clock, |
| + * but will be removed soon |
| + */ |
| + if (use_old_style) { |
| + adg->clk[CLKA] = clk_get(NULL, "audio_clk_a"); |
| + adg->clk[CLKB] = clk_get(NULL, "audio_clk_b"); |
| + adg->clk[CLKC] = clk_get(NULL, "audio_clk_c"); |
| + adg->clk[CLKI] = clk_get(NULL, "audio_clk_internal"); |
| + } |
| + |
| for_each_rsnd_clk(clk, adg, i) { |
| if (IS_ERR(clk)) { |
| dev_err(dev, "Audio clock failed\n"); |
| -- |
| 2.1.2 |
| |