aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/sh
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2015-11-05 03:51:15 -0500
committerMark Brown <broonie@kernel.org>2015-11-16 05:09:29 -0500
commit68a550248e295ba548e30c876ccdec351e286eee (patch)
tree42bf8747ba28ba3681539f58fd9966b7d72265f9 /sound/soc/sh
parent81ad174db5ca8f372da6dc31a4ca25d52f9bec5f (diff)
ASoC: rsnd: call clk_prepare()/clk_enable() for AUDIO_CLKx
ADG can output AUDIO_CLKOUTx, and these are generated from AUDIO_CLKx. Thus we need to call clk_prepare()/clk_enable() for AUDIO_CLKx. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sh')
-rw-r--r--sound/soc/sh/rcar/adg.c21
-rw-r--r--sound/soc/sh/rcar/core.c1
-rw-r--r--sound/soc/sh/rcar/rsnd.h2
3 files changed, 22 insertions, 2 deletions
diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c
index b123734f9fbd..1946ce8baf2e 100644
--- a/sound/soc/sh/rcar/adg.c
+++ b/sound/soc/sh/rcar/adg.c
@@ -418,15 +418,20 @@ static void rsnd_adg_get_clkin(struct rsnd_priv *priv,
418 [CLKC] = "clk_c", 418 [CLKC] = "clk_c",
419 [CLKI] = "clk_i", 419 [CLKI] = "clk_i",
420 }; 420 };
421 int i; 421 int i, ret;
422 422
423 for (i = 0; i < CLKMAX; i++) { 423 for (i = 0; i < CLKMAX; i++) {
424 clk = devm_clk_get(dev, clk_name[i]); 424 clk = devm_clk_get(dev, clk_name[i]);
425 adg->clk[i] = IS_ERR(clk) ? NULL : clk; 425 adg->clk[i] = IS_ERR(clk) ? NULL : clk;
426 } 426 }
427 427
428 for_each_rsnd_clk(clk, adg, i) 428 for_each_rsnd_clk(clk, adg, i) {
429 ret = clk_prepare_enable(clk);
430 if (ret < 0)
431 dev_warn(dev, "can't use clk %d\n", i);
432
429 dev_dbg(dev, "clk %d : %p : %ld\n", i, clk, clk_get_rate(clk)); 433 dev_dbg(dev, "clk %d : %p : %ld\n", i, clk, clk_get_rate(clk));
434 }
430} 435}
431 436
432static void rsnd_adg_get_clkout(struct rsnd_priv *priv, 437static void rsnd_adg_get_clkout(struct rsnd_priv *priv,
@@ -600,3 +605,15 @@ int rsnd_adg_probe(struct platform_device *pdev,
600 605
601 return 0; 606 return 0;
602} 607}
608
609void rsnd_adg_remove(struct platform_device *pdev,
610 struct rsnd_priv *priv)
611{
612 struct rsnd_adg *adg = rsnd_priv_to_adg(priv);
613 struct clk *clk;
614 int i;
615
616 for_each_rsnd_clk(clk, adg, i) {
617 clk_disable_unprepare(clk);
618 }
619}
diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c
index 1363966fa957..81250cf6788d 100644
--- a/sound/soc/sh/rcar/core.c
+++ b/sound/soc/sh/rcar/core.c
@@ -1227,6 +1227,7 @@ static int rsnd_remove(struct platform_device *pdev)
1227 rsnd_mix_remove, 1227 rsnd_mix_remove,
1228 rsnd_dvc_remove, 1228 rsnd_dvc_remove,
1229 rsnd_cmd_remove, 1229 rsnd_cmd_remove,
1230 rsnd_adg_remove,
1230 }; 1231 };
1231 int ret = 0, i; 1232 int ret = 0, i;
1232 1233
diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h
index 599dfb69555a..8efa19fa2b6e 100644
--- a/sound/soc/sh/rcar/rsnd.h
+++ b/sound/soc/sh/rcar/rsnd.h
@@ -405,6 +405,8 @@ int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *mod, unsigned int rate);
405int rsnd_adg_probe(struct platform_device *pdev, 405int rsnd_adg_probe(struct platform_device *pdev,
406 const struct rsnd_of_data *of_data, 406 const struct rsnd_of_data *of_data,
407 struct rsnd_priv *priv); 407 struct rsnd_priv *priv);
408void rsnd_adg_remove(struct platform_device *pdev,
409 struct rsnd_priv *priv);
408int rsnd_adg_set_convert_clk_gen1(struct rsnd_priv *priv, 410int rsnd_adg_set_convert_clk_gen1(struct rsnd_priv *priv,
409 struct rsnd_mod *mod, 411 struct rsnd_mod *mod,
410 unsigned int src_rate, 412 unsigned int src_rate,