提交 7681f6ac 编写于 作者: K Kuninori Morimoto 提交者: Mark Brown

ASoC: rsnd: add probe/remove callback on rsnd_mod_ops

Each rsnd mod needs specific probe method,
and its best timing is DAI probe timing.
But current code runs it mod probe timing.
This patch adds new probe/remove callback to solve it.
Signed-off-by: NKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: NMark Brown <broonie@linaro.org>
上级 221bf523
...@@ -842,6 +842,7 @@ static int rsnd_probe(struct platform_device *pdev) ...@@ -842,6 +842,7 @@ static int rsnd_probe(struct platform_device *pdev)
struct rcar_snd_info *info; struct rcar_snd_info *info;
struct rsnd_priv *priv; struct rsnd_priv *priv;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct rsnd_dai *rdai;
int (*probe_func[])(struct platform_device *pdev, int (*probe_func[])(struct platform_device *pdev,
struct rsnd_priv *priv) = { struct rsnd_priv *priv) = {
rsnd_gen_probe, rsnd_gen_probe,
...@@ -880,6 +881,16 @@ static int rsnd_probe(struct platform_device *pdev) ...@@ -880,6 +881,16 @@ static int rsnd_probe(struct platform_device *pdev)
return ret; return ret;
} }
for_each_rsnd_dai(rdai, priv, i) {
ret = rsnd_dai_call(rdai, &rdai->playback, probe);
if (ret)
return ret;
ret = rsnd_dai_call(rdai, &rdai->capture, probe);
if (ret)
return ret;
}
/* /*
* asoc register * asoc register
*/ */
...@@ -912,9 +923,21 @@ static int rsnd_probe(struct platform_device *pdev) ...@@ -912,9 +923,21 @@ static int rsnd_probe(struct platform_device *pdev)
static int rsnd_remove(struct platform_device *pdev) static int rsnd_remove(struct platform_device *pdev)
{ {
struct rsnd_priv *priv = dev_get_drvdata(&pdev->dev); struct rsnd_priv *priv = dev_get_drvdata(&pdev->dev);
struct rsnd_dai *rdai;
int ret, i;
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
for_each_rsnd_dai(rdai, priv, i) {
ret = rsnd_dai_call(rdai, &rdai->playback, remove);
if (ret)
return ret;
ret = rsnd_dai_call(rdai, &rdai->capture, remove);
if (ret)
return ret;
}
/* /*
* remove each module * remove each module
*/ */
......
...@@ -167,6 +167,12 @@ enum rsnd_mod_type { ...@@ -167,6 +167,12 @@ enum rsnd_mod_type {
struct rsnd_mod_ops { struct rsnd_mod_ops {
char *name; char *name;
int (*probe)(struct rsnd_mod *mod,
struct rsnd_dai *rdai,
struct rsnd_dai_stream *io);
int (*remove)(struct rsnd_mod *mod,
struct rsnd_dai *rdai,
struct rsnd_dai_stream *io);
int (*init)(struct rsnd_mod *mod, int (*init)(struct rsnd_mod *mod,
struct rsnd_dai *rdai, struct rsnd_dai *rdai,
struct rsnd_dai_stream *io); struct rsnd_dai_stream *io);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册