aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2014-02-07 03:53:06 -0500
committerMark Brown <broonie@linaro.org>2014-02-07 12:31:44 -0500
commit8691d0748e566f8708f7a9139e760134f5dc3130 (patch)
treeb68b1e9665203dc88d763a92b0983c5c751f5970
parent629509c5bc478c0343d94c8c70812396f44447fb (diff)
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>
-rw-r--r--sound/soc/sh/rcar/adg.c40
1 files 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,
385{ 385{
386 struct rsnd_adg *adg; 386 struct rsnd_adg *adg;
387 struct device *dev = rsnd_priv_to_dev(priv); 387 struct device *dev = rsnd_priv_to_dev(priv);
388 struct clk *clk; 388 struct clk *clk, *clk_orig;
389 int i; 389 int i;
390 bool use_old_style = false;
390 391
391 adg = devm_kzalloc(dev, sizeof(*adg), GFP_KERNEL); 392 adg = devm_kzalloc(dev, sizeof(*adg), GFP_KERNEL);
392 if (!adg) { 393 if (!adg) {
@@ -394,10 +395,39 @@ int rsnd_adg_probe(struct platform_device *pdev,
394 return -ENOMEM; 395 return -ENOMEM;
395 } 396 }
396 397
397 adg->clk[CLKA] = clk_get(NULL, "audio_clk_a"); 398 clk_orig = clk_get(dev, NULL);
398 adg->clk[CLKB] = clk_get(NULL, "audio_clk_b"); 399 adg->clk[CLKA] = clk_get(dev, "clk_a");
399 adg->clk[CLKC] = clk_get(NULL, "audio_clk_c"); 400 adg->clk[CLKB] = clk_get(dev, "clk_b");
400 adg->clk[CLKI] = clk_get(NULL, "audio_clk_internal"); 401 adg->clk[CLKC] = clk_get(dev, "clk_c");
402 adg->clk[CLKI] = clk_get(dev, "clk_i");
403
404 /*
405 * It request device dependent audio clock.
406 * But above all clks will indicate rsnd module clock
407 * if platform doesn't it
408 */
409 for_each_rsnd_clk(clk, adg, i) {
410 if (clk_orig == clk) {
411 dev_warn(dev,
412 "doesn't have device dependent clock, use independent clock\n");
413 use_old_style = true;
414 break;
415 }
416 }
417
418 /*
419 * note:
420 * these exist in order to keep compatible with
421 * platform which has device independent audio clock,
422 * but will be removed soon
423 */
424 if (use_old_style) {
425 adg->clk[CLKA] = clk_get(NULL, "audio_clk_a");
426 adg->clk[CLKB] = clk_get(NULL, "audio_clk_b");
427 adg->clk[CLKC] = clk_get(NULL, "audio_clk_c");
428 adg->clk[CLKI] = clk_get(NULL, "audio_clk_internal");
429 }
430
401 for_each_rsnd_clk(clk, adg, i) { 431 for_each_rsnd_clk(clk, adg, i) {
402 if (IS_ERR(clk)) { 432 if (IS_ERR(clk)) {
403 dev_err(dev, "Audio clock failed\n"); 433 dev_err(dev, "Audio clock failed\n");