Commit 89e3e2c3 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

ASoC: rsnd: fixup rsnd_dai_call() behavior for .stop/.quit

Current rsnd_dai_call returns immediately if rsnd_mod_call return fail.
Thus, each callback-count can be unbalanced for example .init was OK,
start was OK, but, .stop was not OK. This case .quit should be called
but isn't called. And, rsnd_dai_stream_quit() also not be called.
rsnd_dai_call() should call all .stop/.quit eventhough it returns error.
Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 32a96d55
...@@ -327,9 +327,7 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io) ...@@ -327,9 +327,7 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
mod = (io)->mod[i]; \ mod = (io)->mod[i]; \
if (!mod) \ if (!mod) \
continue; \ continue; \
ret = rsnd_mod_call(mod, io, fn, param); \ ret |= rsnd_mod_call(mod, io, fn, param); \
if (ret < 0) \
break; \
} \ } \
ret; \ ret; \
}) })
...@@ -495,16 +493,10 @@ static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd, ...@@ -495,16 +493,10 @@ static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd,
break; break;
case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_STOP:
ret = rsnd_dai_call(stop, io, priv); ret = rsnd_dai_call(stop, io, priv);
if (ret < 0)
goto dai_trigger_end;
ret = rsnd_dai_call(quit, io, priv); ret |= rsnd_dai_call(quit, io, priv);
if (ret < 0)
goto dai_trigger_end;
ret = rsnd_platform_call(priv, dai, stop, ssi_id); ret |= rsnd_platform_call(priv, dai, stop, ssi_id);
if (ret < 0)
goto dai_trigger_end;
rsnd_dai_stream_quit(io); rsnd_dai_stream_quit(io);
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment