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>
This commit is contained in:
Родитель
81ad174db5
Коммит
68a550248e
|
@ -418,15 +418,20 @@ static void rsnd_adg_get_clkin(struct rsnd_priv *priv,
|
||||||
[CLKC] = "clk_c",
|
[CLKC] = "clk_c",
|
||||||
[CLKI] = "clk_i",
|
[CLKI] = "clk_i",
|
||||||
};
|
};
|
||||||
int i;
|
int i, ret;
|
||||||
|
|
||||||
for (i = 0; i < CLKMAX; i++) {
|
for (i = 0; i < CLKMAX; i++) {
|
||||||
clk = devm_clk_get(dev, clk_name[i]);
|
clk = devm_clk_get(dev, clk_name[i]);
|
||||||
adg->clk[i] = IS_ERR(clk) ? NULL : clk;
|
adg->clk[i] = IS_ERR(clk) ? NULL : clk;
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each_rsnd_clk(clk, adg, i)
|
for_each_rsnd_clk(clk, adg, i) {
|
||||||
|
ret = clk_prepare_enable(clk);
|
||||||
|
if (ret < 0)
|
||||||
|
dev_warn(dev, "can't use clk %d\n", i);
|
||||||
|
|
||||||
dev_dbg(dev, "clk %d : %p : %ld\n", i, clk, clk_get_rate(clk));
|
dev_dbg(dev, "clk %d : %p : %ld\n", i, clk, clk_get_rate(clk));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rsnd_adg_get_clkout(struct rsnd_priv *priv,
|
static void rsnd_adg_get_clkout(struct rsnd_priv *priv,
|
||||||
|
@ -600,3 +605,15 @@ int rsnd_adg_probe(struct platform_device *pdev,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rsnd_adg_remove(struct platform_device *pdev,
|
||||||
|
struct rsnd_priv *priv)
|
||||||
|
{
|
||||||
|
struct rsnd_adg *adg = rsnd_priv_to_adg(priv);
|
||||||
|
struct clk *clk;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for_each_rsnd_clk(clk, adg, i) {
|
||||||
|
clk_disable_unprepare(clk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1227,6 +1227,7 @@ static int rsnd_remove(struct platform_device *pdev)
|
||||||
rsnd_mix_remove,
|
rsnd_mix_remove,
|
||||||
rsnd_dvc_remove,
|
rsnd_dvc_remove,
|
||||||
rsnd_cmd_remove,
|
rsnd_cmd_remove,
|
||||||
|
rsnd_adg_remove,
|
||||||
};
|
};
|
||||||
int ret = 0, i;
|
int ret = 0, i;
|
||||||
|
|
||||||
|
|
|
@ -405,6 +405,8 @@ int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *mod, unsigned int rate);
|
||||||
int rsnd_adg_probe(struct platform_device *pdev,
|
int rsnd_adg_probe(struct platform_device *pdev,
|
||||||
const struct rsnd_of_data *of_data,
|
const struct rsnd_of_data *of_data,
|
||||||
struct rsnd_priv *priv);
|
struct rsnd_priv *priv);
|
||||||
|
void rsnd_adg_remove(struct platform_device *pdev,
|
||||||
|
struct rsnd_priv *priv);
|
||||||
int rsnd_adg_set_convert_clk_gen1(struct rsnd_priv *priv,
|
int rsnd_adg_set_convert_clk_gen1(struct rsnd_priv *priv,
|
||||||
struct rsnd_mod *mod,
|
struct rsnd_mod *mod,
|
||||||
unsigned int src_rate,
|
unsigned int src_rate,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче