diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2015-11-05 03:51:15 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-11-16 05:09:29 -0500 |
commit | 68a550248e295ba548e30c876ccdec351e286eee (patch) | |
tree | 42bf8747ba28ba3681539f58fd9966b7d72265f9 /sound/soc/sh | |
parent | 81ad174db5ca8f372da6dc31a4ca25d52f9bec5f (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.c | 21 | ||||
-rw-r--r-- | sound/soc/sh/rcar/core.c | 1 | ||||
-rw-r--r-- | sound/soc/sh/rcar/rsnd.h | 2 |
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 | ||
432 | static void rsnd_adg_get_clkout(struct rsnd_priv *priv, | 437 | static 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 | |||
609 | void 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); | |||
405 | int rsnd_adg_probe(struct platform_device *pdev, | 405 | int 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); |
408 | void rsnd_adg_remove(struct platform_device *pdev, | ||
409 | struct rsnd_priv *priv); | ||
408 | int rsnd_adg_set_convert_clk_gen1(struct rsnd_priv *priv, | 410 | int 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, |