Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7681f6ac authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown
Browse files

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: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 221bf523
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -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
	 */
+6 −0
Original line number Diff line number Diff line
@@ -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);