linux/sound/soc/fsl
Nicolin Chen e6b3984658 ASoC: fsl_sai: Fix buggy configurations in trigger()
The current trigger() has two crucial problems:
1) The DMA request enabling operations (FSL_SAI_CSR_FRDE) for Tx and Rx are
   now totally exclusive: It would fail to run simultaneous Tx-Rx cases.
2) The TERE disabling operation depends on an incorrect condition -- active
   reference count that only gets increased in snd_pcm_open() and decreased
   in snd_pcm_close(): The TERE would never get cleared.

So this patch overwrites the trigger function by following these rules:
A) We continue to support tx-async-while-rx-sync-to-tx case alone, which's
   originally limited by this fsl_sai driver, but we make the code easy to
   modify for the further support of the opposite case.
B) We enable both TE and RE for PLAYBACK stream or CAPTURE stream but only
   enabling the DMA request bit (FSL_SAI_CSR_FRDE) of the current direction
   due to the requirement of SAI -- For tx-async-while-rx-sync-to-tx case,
   the receiver is enabled only when both the transmitter and receiver are
   enabled.

Tested cases:
a) aplay test.wav -d5
b) arecord -r44100 -c2 -fS16_LE test.wav -d5
c) arecord -r44100 -c2 -fS16_LE -d5 | aplay
d) (aplay test2.wav &); sleep 1; arecord -r44100 -c2 -fS16_LE test.wav -d1
e) (arecord -r44100 -c2 -fS16_LE test.wav -d5 &); sleep 1; aplay test.wav -d1

Signed-off-by: Nicolin Chen <Guangyu.Chen@freescale.com>
Acked-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
2014-04-14 17:26:05 +01:00
..
Kconfig ASoC: imx-ssi: Add .xlate_tdm_slot_mask() support. 2014-03-25 13:06:43 +00:00
Makefile ASoC: fsl_esai: Add ESAI CPU DAI driver 2014-01-10 12:52:15 +00:00
efika-audio-fabric.c ASoC: fsl: Add .owner to struct snd_soc_card 2011-12-22 17:34:32 +00:00
eukrea-tlv320.c ASoC: eukrea-tlv320: Add DT support. 2014-03-03 12:27:52 +08:00
fsl_dma.c ASoC: fsl: Don't set unused struct snd_pcm_hardware fields 2014-01-07 11:40:24 +00:00
fsl_dma.h ASoC: multi-component - ASoC Multi-Component Support 2010-08-12 14:00:00 +01:00
fsl_esai.c ASoC: fsl-esai: Add .xlate_tdm_slot_mask() support. 2014-03-25 13:06:43 +00:00
fsl_esai.h ASoC: fsl-esai: fix ESAI TDM slot setting 2014-02-10 13:39:18 +00:00
fsl_sai.c ASoC: fsl_sai: Fix buggy configurations in trigger() 2014-04-14 17:26:05 +01:00
fsl_sai.h ASoC: fsl_sai: Fix buggy configurations in trigger() 2014-04-14 17:26:05 +01:00
fsl_spdif.c Merge remote-tracking branches 'asoc/topic/da7213', 'asoc/topic/da732x', 'asoc/topic/da9055', 'asoc/topic/davinci', 'asoc/topic/fsl', 'asoc/topic/fsl-esai', 'asoc/topic/fsl-sai' and 'asoc/topic/fsl-spdif' into asoc-next 2014-03-12 23:04:22 +00:00
fsl_spdif.h ASoC: fsl: Add S/PDIF CPU DAI driver 2013-08-22 10:45:22 +01:00
fsl_ssi.c sound fixes for 3.14-rc1 2014-01-31 15:38:09 -08:00
fsl_ssi.h ASoC: fsl_ssi: Add DAI master mode support for SSI on i.MX series 2013-12-19 15:03:52 +00:00
fsl_utils.c ASoC: fsl-utils: Add fsl_asoc_xlate_tdm_slot_mask() support. 2014-03-25 13:06:43 +00:00
fsl_utils.h ASoC: fsl-utils: Add fsl_asoc_xlate_tdm_slot_mask() support. 2014-03-25 13:06:43 +00:00
imx-audmux.c ASoC: fsl: Fix memory leak in imx-audmux.c 2013-10-14 12:52:59 +01:00
imx-audmux.h ASoC: imx-audmux: Move definitions to dt-bindings 2013-08-16 11:05:17 +01:00
imx-mc13783.c ASoC: fsl: fix pm support of machine drivers 2014-02-10 13:18:37 +00:00
imx-pcm-dma.c ASoC: fsl: Don't set unused struct snd_pcm_hardware fields 2014-01-07 11:40:24 +00:00
imx-pcm-fiq.c ASoC: fsl: imx-pcm-fiq: Remove unneeded 'out' label 2014-02-24 14:41:15 +09:00
imx-pcm.h ASoC: fsl: Use devm_snd_dmaengine_pcm_register() 2013-12-02 11:48:54 +00:00
imx-sgtl5000.c ASoC: fsl: fix pm support of machine drivers 2014-02-10 13:18:37 +00:00
imx-spdif.c Merge remote-tracking branches 'asoc/topic/ad1836', 'asoc/topic/ad193x', 'asoc/topic/adav80x', 'asoc/topic/adsp', 'asoc/topic/ak4641', 'asoc/topic/ak4642', 'asoc/topic/arizona', 'asoc/topic/atmel', 'asoc/topic/au1x', 'asoc/topic/axi', 'asoc/topic/bcm2835', 'asoc/topic/blackfin', 'asoc/topic/cs4271', 'asoc/topic/cs42l52', 'asoc/topic/da7210', 'asoc/topic/davinci', 'asoc/topic/ep93xx', 'asoc/topic/fsl', 'asoc/topic/fsl-mxs', 'asoc/topic/generic', 'asoc/topic/hdmi', 'asoc/topic/jack', 'asoc/topic/jz4740', 'asoc/topic/max98090', 'asoc/topic/mxs', 'asoc/topic/omap', 'asoc/topic/pxa', 'asoc/topic/rcar', 'asoc/topic/s6000', 'asoc/topic/sai', 'asoc/topic/samsung', 'asoc/topic/sgtl5000', 'asoc/topic/spear', 'asoc/topic/ssm2518', 'asoc/topic/ssm2602', 'asoc/topic/tegra', 'asoc/topic/tlv320aic3x', 'asoc/topic/twl6040', 'asoc/topic/txx9', 'asoc/topic/uda1380', 'asoc/topic/width', 'asoc/topic/wm8510', 'asoc/topic/wm8523', 'asoc/topic/wm8580', 'asoc/topic/wm8711', 'asoc/topic/wm8728', 'asoc/topic/wm8731', 'asoc/topic/wm8741', 'asoc/topic/wm8750', 'asoc/topic/wm8753', 'asoc/topic/wm8776', 'asoc/topic/wm8804', 'asoc/topic/wm8900', 'asoc/topic/wm8901', 'asoc/topic/wm8940', 'asoc/topic/wm8962', 'asoc/topic/wm8974', 'asoc/topic/wm8985', 'asoc/topic/wm8988', 'asoc/topic/wm8990', 'asoc/topic/wm8991', 'asoc/topic/wm8994', 'asoc/topic/wm8995', 'asoc/topic/wm9081' and 'asoc/topic/x86' into asoc-next 2014-01-02 13:01:55 +00:00
imx-ssi.c ASoC: imx-ssi: Add .xlate_tdm_slot_mask() support. 2014-03-25 13:06:43 +00:00
imx-ssi.h ASoC: fsl: imx-ssi: omit ssi counter to avoid harm in unbalanced situation 2013-12-02 11:57:02 +00:00
imx-wm8962.c ASoC: fsl: fix pm support of machine drivers 2014-02-10 13:18:37 +00:00
mpc5200_dma.c ASoC: fsl: Don't set unused struct snd_pcm_hardware fields 2014-01-07 11:40:24 +00:00
mpc5200_dma.h ASoC: fsl: mpc5200 combine psc_dma platform data 2012-09-18 23:03:42 -04:00
mpc5200_psc_ac97.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
mpc5200_psc_ac97.h ASoC: multi-component - ASoC Multi-Component Support 2010-08-12 14:00:00 +01:00
mpc5200_psc_i2s.c ASoC: fsl: Don't mix SNDRV_PCM_RATE_CONTINUOUS with specific rates 2014-01-14 20:42:26 +00:00
mpc8610_hpcd.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
mx27vis-aic32x4.c ASoC: fsl: remove use of imx-pcm-audio from imx-ssi 2013-05-15 09:27:27 +04:00
p1022_ds.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
p1022_rdk.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
pcm030-audio-fabric.c ASoC: fsl: set correct platform drvdata in pcm030_fabric_probe() 2013-12-02 11:13:19 +00:00
phycore-ac97.c ASoC: fsl: remove use of imx-fiq-pcm-audio from imx-ssi 2013-05-15 09:27:27 +04:00
wm1133-ev1.c ASoC: wm1133-ev1: Convert to table based DAPM setup 2014-03-03 16:06:20 +08:00