tree cd3e32009a6c75a6e40d09eceb19b030dc741e84
parent ab49436eecf5cc779a1ff659ba59c88779685b47
author Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 1601353885 +0900
committer Mark Brown <broonie@kernel.org> 1603730655 +0000
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAl+W/N8ACgkQJNaLcl1U
 h9Adagf/YxENCLJ6ZHNbZpgnpiIHRK5SoYlBYntnU7ZAYE1rqNhI6xSq+x3QD+Tk
 mlT8u7gLmj+7DPM2AtBOvPotFmIMnVc2EH37OTNg4o8TIAkT3iwAhqMqUHqKWllD
 y0T1pcVoMAJrsObePj/wyXCRC24e7fu1rex2BNsitS0x6SjD+DJQbd1httNSCA8l
 yOmtfrxNTtnSeTYL8GaQh4JBu6jOU/sO4S7scDqTU6SdOM8fk227zIhlOlP4vpOb
 ELfqhsTsIaoG4Qol7Z7csAYOqJ/IQ1fozWVOB8yKx37m3FU4/PU5HL/+KRTUGt8i
 laMwQWOy+X+1ClfzdtqYafkLr0gPBQ==
 =HXQl
 -----END PGP SIGNATURE-----

ASoC: soc-link: add mark for snd_soc_link_hw_params/free()

soc_pcm_hw_params() does rollback when failed (A),
but, it is almost same as soc_pcm_hw_free().

	static int soc_pcm_hw_params(xxx)
	{
		...
		if (ret < 0)
			goto xxx_err;
		...
		return ret;

 ^	component_err:
 |		...
 |	interface_err:
(A)		...
 |	codec_err:
 |		...
 v		return ret;
	}

The difference is
soc_pcm_hw_free() is for all dai/component/substream,
rollback          is for succeeded part only.

This kind of duplicated code can be a hotbed of bugs,
thus, we want to share soc_pcm_hw_free() and rollback.

Now, soc_pcm_hw_params/free() are handling
=>	1) snd_soc_link_hw_params/free()
	2) snd_soc_pcm_component_hw_params/free()
	3) snd_soc_dai_hw_params/free()

This patch is for 1) snd_soc_link_hw_params/free().

The idea of having bit-flag or counter is not enough for this purpose.
For example if one DAI is used for 2xPlaybacks for some reasons,
and if 1st Playback was succeeded but 2nd Playback was failed,
2nd Playback rollback doesn't need to call shutdown.
But it has succeeded bit-flag or counter via 1st Playback,
thus, 2nd Playback rollback will call unneeded shutdown.
And 1st Playback's necessary shutdown will not be called,
because bit-flag or counter was cleared by wrong 2nd Playback rollback.

To avoid such case, this patch marks substream pointer when hw_params() was
succeeded. If rollback needed, it will check rollback flag and marked
substream pointer.

One note here ist that it cares *previous* hw_params() only now,
but we might want to check *whole* marked substream in the future.
This patch is using macro named "push/pop", so that it can be easily
update.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87lfgtgqba.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
