linux_dsm_epyc7002/sound/soc
Oskar Schirmer 3621dbbc27 ASoC: fsl: imx-ssi: omit ssi counter to avoid harm in unbalanced situation
Unbalanced calls to imx_ssi_trigger() may result in endless
SSI activity and thus provoke eternal sound. While on the first glance,
the switch statement looks pretty symmetric, the SUSPEND/RESUME
pair is not: the suspend case comes along snd_pcm_suspend_all(),
which for fsl/imx-pcm-fiq is called only at snd_soc_suspend(),
but the resume case originates straight from the SNDRV_PCM_IOCTL_RESUME.
This way userland may provoke an unbalanced resume, which might cause
the ssi->enabled counter to increase and never return to zero again,
so eventually SSI_SCR_SSIEN is never disabled.

As the information on whether to enable the SSI or not is contained
in the two bits for TE/RE, we save all the software mirroring of
hardware state here and simply use the hardware register itself
to keep the state of whether someone is currently playing or capturing.

This is essentially the same stuff as in sound/soc/fsl/imx-pcm-fiq.c
which I send a patch for three days ago. Astonishing enough this
highly fragile scheme is used twice in parallel to serve the very
same control function, synchronously: Once out of sync you are lost
until reboot.

Note, that these fixes wont prevent state machine distortion on alsa
level to cut sound or the like. It just makes sure we have a chance
to synchronise again later on.

Signed-off-by: Oskar Schirmer <oskar@scara.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-12-02 11:57:02 +00:00
..
atmel Merge branch 'for-linus-dma-masks' of git://git.linaro.org/people/rmk/linux-arm 2013-11-14 07:55:21 +09:00
au1x Merge remote-tracking branch 'asoc/topic/au1x' into asoc-next 2013-08-22 14:28:29 +01:00
blackfin sound fixes for 3.13-rc1 2013-11-16 12:50:53 -08:00
cirrus Merge remote-tracking branch 'asoc/topic/ep93xx' into asoc-next 2013-11-08 10:43:28 +00:00
codecs sound fixes #2 for 3.13-rc1 2013-11-22 10:57:31 -08:00
davinci Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-11-20 13:20:24 -08:00
dwc ASoC: designware_i2s: Remove unnecessary dev_set_drvdata() 2013-08-29 13:18:32 +01:00
fsl ASoC: fsl: imx-ssi: omit ssi counter to avoid harm in unbalanced situation 2013-12-02 11:57:02 +00:00
generic ASoC: simple-card: un-implemented set_fmt is not error 2013-10-20 17:28:02 +01:00
jz4740 DMA-API: sound: fix dma mask handling in a lot of drivers 2013-10-31 14:48:47 +00:00
kirkwood Merge branch 'for-linus-dma-masks' of git://git.linaro.org/people/rmk/linux-arm 2013-11-14 07:55:21 +09:00
mid-x86 Merge remote-tracking branch 'asoc/topic/warn' into asoc-next 2013-11-08 10:43:41 +00:00
mxs Merge remote-tracking branch 'asoc/topic/mxs' into asoc-next 2013-11-08 10:43:32 +00:00
nuc900 DMA-API: sound: fix dma mask handling in a lot of drivers 2013-10-31 14:48:47 +00:00
omap Merge branch 'for-linus-dma-masks' of git://git.linaro.org/people/rmk/linux-arm 2013-11-14 07:55:21 +09:00
pxa Merge branch 'for-linus-dma-masks' of git://git.linaro.org/people/rmk/linux-arm 2013-11-14 07:55:21 +09:00
s6000 Merge branch 'for-linus-dma-masks' of git://git.linaro.org/people/rmk/linux-arm 2013-11-14 07:55:21 +09:00
samsung tree-wide: use reinit_completion instead of INIT_COMPLETION 2013-11-15 09:32:21 +09:00
sh ASoC: Fixes for v3.13 2013-11-21 15:07:44 +01:00
spear ASoC: SPEAr spdif_out: Remove redundant variable 2013-09-19 12:56:26 +01:00
tegra Merge remote-tracking branch 'asoc/topic/tegra' into asoc-next 2013-11-08 10:43:37 +00:00
txx9 ASoC: txx9: Use WARN_ON() instead of BUG_ON() 2013-11-07 19:55:17 +00:00
ux500 ASoC: mop500: add .owner to struct snd_soc_card 2013-07-15 11:12:24 +01:00
Kconfig ALSA: move dmaengine implementation from ASoC to ALSA core 2013-08-15 11:18:09 +01:00
Makefile ASoC: core: Implement devm_snd_soc_register_component() 2013-09-17 00:49:57 +01:00
soc-cache.c Merge remote-tracking branch 'asoc/topic/warn' into asoc-next 2013-11-08 10:43:41 +00:00
soc-compress.c ASoC: compress: Use power efficient workqueue 2013-08-12 11:04:54 +01:00
soc-core.c Merge remote-tracking branch 'asoc/topic/core' into asoc-next 2013-11-08 10:43:25 +00:00
soc-dapm.c Merge remote-tracking branch 'asoc/fix/ab8500' into asoc-linus 2013-11-20 15:20:24 +00:00
soc-devres.c ASoC: Add resource managed snd_dmaengine_pcm_register() 2013-11-28 13:35:36 +00:00
soc-generic-dmaengine-pcm.c ASoC: generic-dmaengine-pcm: Set BATCH flag when residue reporting is not supported 2013-12-02 11:24:31 +00:00
soc-io.c ASoC: Remove snd_soc_bulk_write_raw() 2013-09-17 00:37:03 +01:00
soc-jack.c ASoC: dont call dapm_sync while reporting jack always 2013-10-22 09:29:02 +01:00
soc-pcm.c ASoC: Add pinctrl PM to components of active DAIs 2013-11-04 09:08:59 -08:00
soc-utils.c ASoC: core utils: Dont set DMA params for BE substreams 2013-09-17 00:37:03 +01:00