Skip to content

Commit

Permalink
ASoC: rsnd: fixup dai remove callback operation
Browse files Browse the repository at this point in the history
rsnd driver is using SSI/SRC/DVC which are
using "mod" base operation.
These "mod" are supporting "probe" and "remove" callbacks.

Current rsnd_probe should call "remove" if "probe" was failed,
since "probe" might be having DMAEngine handle.
Some mod's "remove" callback might be called without calling
"probe", but it is no problem. because "remove" do nothing
in such case.

So, all mod's "remove" should be called when error case
of rsnd_probe() and rsnd_remove().

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
  • Loading branch information
Kuninori Morimoto authored and Mark Brown committed Jul 25, 2014
1 parent 2bf865b commit d62a3dc
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions sound/soc/sh/rcar/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1043,11 +1043,11 @@ static int rsnd_probe(struct platform_device *pdev)
for_each_rsnd_dai(rdai, priv, i) {
ret = rsnd_dai_call(probe, &rdai->playback, rdai);
if (ret)
return ret;
goto exit_snd_probe;

ret = rsnd_dai_call(probe, &rdai->capture, rdai);
if (ret)
return ret;
goto exit_snd_probe;
}

/*
Expand Down Expand Up @@ -1075,6 +1075,11 @@ static int rsnd_probe(struct platform_device *pdev)

exit_snd_soc:
snd_soc_unregister_platform(dev);
exit_snd_probe:
for_each_rsnd_dai(rdai, priv, i) {
rsnd_dai_call(remove, &rdai->playback, rdai);
rsnd_dai_call(remove, &rdai->capture, rdai);
}

return ret;
}
Expand All @@ -1083,21 +1088,16 @@ static int rsnd_remove(struct platform_device *pdev)
{
struct rsnd_priv *priv = dev_get_drvdata(&pdev->dev);
struct rsnd_dai *rdai;
int ret, i;
int ret = 0, i;

pm_runtime_disable(&pdev->dev);

for_each_rsnd_dai(rdai, priv, i) {
ret = rsnd_dai_call(remove, &rdai->playback, rdai);
if (ret)
return ret;

ret = rsnd_dai_call(remove, &rdai->capture, rdai);
if (ret)
return ret;
ret |= rsnd_dai_call(remove, &rdai->playback, rdai);
ret |= rsnd_dai_call(remove, &rdai->capture, rdai);
}

return 0;
return ret;
}

static struct platform_driver rsnd_driver = {
Expand Down

0 comments on commit d62a3dc

Please sign in to comment.