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: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
Родитель
221bf523e3
Коммит
7681f6ac6b
|
@ -842,6 +842,7 @@ static int rsnd_probe(struct platform_device *pdev)
|
|||
struct rcar_snd_info *info;
|
||||
struct rsnd_priv *priv;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct rsnd_dai *rdai;
|
||||
int (*probe_func[])(struct platform_device *pdev,
|
||||
struct rsnd_priv *priv) = {
|
||||
rsnd_gen_probe,
|
||||
|
@ -880,6 +881,16 @@ static int rsnd_probe(struct platform_device *pdev)
|
|||
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
|
||||
*/
|
||||
|
@ -912,9 +923,21 @@ exit_snd_soc:
|
|||
static int rsnd_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct rsnd_priv *priv = dev_get_drvdata(&pdev->dev);
|
||||
struct rsnd_dai *rdai;
|
||||
int ret, i;
|
||||
|
||||
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
|
||||
*/
|
||||
|
|
|
@ -167,6 +167,12 @@ enum rsnd_mod_type {
|
|||
|
||||
struct rsnd_mod_ops {
|
||||
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,
|
||||
struct rsnd_dai *rdai,
|
||||
struct rsnd_dai_stream *io);
|
||||
|
|
Загрузка…
Ссылка в новой задаче