linux/sound/soc
Kuninori Morimoto 918ad772c4
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>
2020-10-26 16:44:15 +00:00
..
adi
amd ASoC: AMD: Clean kernel log from deferred probe error messages 2020-08-27 14:43:23 +01:00
atmel ASoC: mchp-spdiftx: remove 'TX' from playback stream name 2020-10-09 15:11:19 +01:00
au1x ASoC: au1x: use asoc_substream_to_rtd() 2020-07-23 19:07:36 +01:00
bcm ASoC: bcm2835: Silence clk_get() error on -EPROBE_DEFER 2020-07-28 17:04:07 +01:00
cirrus ASoC: cirrus: use asoc_substream_to_rtd() 2020-07-23 19:07:28 +01:00
codecs Merge existing fixes from asoc/for-5.10 2020-10-26 13:11:37 +00:00
dwc ASoC: dwc: use asoc_substream_to_rtd() 2020-07-23 19:07:34 +01:00
fsl Merge remote-tracking branch 'asoc/for-5.10' into asoc-next 2020-10-09 15:42:31 +01:00
generic ASoC: simple-card: Use snd_soc_of_parse_aux_devs() 2020-08-18 14:52:39 +01:00
hisilicon treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
img ASoC: img-parallel-out: Fix a reference count leak 2020-06-15 20:58:35 +01:00
intel ASoC: Intel: catpt: Relax clock selection conditions 2020-10-14 20:29:56 +01:00
jz4740 ASoC: ingenic: Unconditionally depend on devicetree 2020-05-28 13:20:17 +01:00
kirkwood ASoC: kirkwood: use asoc_substream_to_rtd() 2020-07-23 19:07:41 +01:00
mediatek Merge existing fixes from asoc/for-5.10 2020-10-26 13:11:37 +00:00
meson Linux 5.9-rc5 2020-10-06 16:19:24 +01:00
mxs ASoC: mxs: use asoc_substream_to_rtd() 2020-07-23 19:07:43 +01:00
pxa treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
qcom ASoC: qcom: sdm845: set driver name correctly 2020-10-23 18:28:50 +01:00
rockchip Linux 5.9-rc5 2020-10-06 16:19:24 +01:00
samsung Linux 5.9-rc5 2020-10-06 16:19:24 +01:00
sh ASoC: sh: Replace tasklet with work 2020-09-09 15:42:09 +01:00
sirf
sof ASoC: SOF: loader: handle all SOF_IPC_EXT types 2020-10-23 18:28:52 +01:00
spear ASoC: spear: merge .digital_mute() into .mute_stream() 2020-07-16 23:06:08 +01:00
sprd ASoC: various vendors: delete repeated words in comments 2020-08-18 14:52:32 +01:00
sti ASoC: sti: uniperif: fix 'defined by not used' warning 2020-07-10 15:13:44 +01:00
stm ASoC: stm32: dfsdm: change rate limits 2020-10-08 20:44:40 +01:00
sunxi ASoC: sun8i-codec: Use snd_soc_dai_get_drvdata 2020-10-05 14:16:21 +01:00
tegra ASoC: tegra: trimslice.c: use devm_snd_soc_register_card() 2020-10-01 20:28:17 +01:00
ti ASoC: ti: davinci-mcasp: Use &pdev->dev for early dev_warn 2020-10-08 21:16:52 +01:00
txx9 ASoC: txx9: Replace tasklet with work 2020-09-09 15:42:10 +01:00
uniphier ASoC: uniphier: use asoc_substream_to_rtd() 2020-07-23 19:07:43 +01:00
ux500 ASoC: ux500: use asoc_substream_to_rtd() 2020-07-23 19:07:20 +01:00
xilinx sound: remove duplicate "the the" phrase in Kconfig text 2020-08-18 14:52:43 +01:00
xtensa ASoC: xtensa: use asoc_substream_to_rtd() 2020-07-23 19:07:42 +01:00
zte treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
Makefile ASoC: soc-component: merge soc-io.c into soc-component.c 2020-06-15 18:21:26 +01:00
soc-ac97.c ASoC: soc-ac97: fix kernel-doc 2020-07-03 17:33:46 +01:00
soc-acpi.c
soc-card.c ASoC: soc-card: add snd_soc_card_remove_dai_link() 2020-05-30 02:11:42 +01:00
soc-component.c ASoC: soc-component: add mark for snd_soc_pcm_component_pm_runtime_get/put() 2020-09-28 17:01:44 +01:00
soc-compress.c ASoC: soc-component: add mark for snd_soc_pcm_component_pm_runtime_get/put() 2020-09-28 17:01:44 +01:00
soc-core.c Linux 5.9-rc5 2020-10-06 16:19:24 +01:00
soc-dai.c ASoC: soc-dai: add mark for snd_soc_dai_startup/shutdown() 2020-09-28 17:01:42 +01:00
soc-dapm.c ASoC: soc-dai: add mark for snd_soc_dai_startup/shutdown() 2020-09-28 17:01:42 +01:00
soc-devres.c ASoC: core: Remove only the registered component in devm functions 2020-07-07 11:55:46 +01:00
soc-generic-dmaengine-pcm.c ASoC: dmaengine: Document support for TX only or RX only streams 2020-10-09 15:11:20 +01:00
soc-jack.c ASoC: soc-card: move snd_soc_card_jack_new() to soc-card 2020-05-30 02:11:28 +01:00
soc-link.c ASoC: soc-link: add mark for snd_soc_link_hw_params/free() 2020-10-26 16:44:15 +00:00
soc-ops.c ASoC: soc-component: merge snd_soc_component_read() and snd_soc_component_read32() 2020-06-22 15:13:36 +01:00
soc-pcm.c ASoC: soc-link: add mark for snd_soc_link_hw_params/free() 2020-10-26 16:44:15 +00:00
soc-topology.c Merge remote-tracking branch 'asoc/for-5.9' into asoc-linus 2020-10-09 15:42:29 +01:00
soc-utils.c ASoC: soc-xxx: add asoc_substream_to_rtd() 2020-07-23 19:07:19 +01:00