mirror of
https://github.com/torvalds/linux.git
synced 2024-12-15 07:33:56 +00:00
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:
parent
221bf523e3
commit
7681f6ac6b
@ -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)
|
|||||||
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 @@ exit_snd_soc:
|
|||||||
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 {
|
|||||||
|
|
||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user