linux/sound
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
..
aoa ALSA: Drop __bitwise and typedefs for snd_device attributes 2014-02-14 08:20:24 +01:00
arm ALSA: arm: Convert to snd_card_new() with a device pointer 2014-02-14 08:14:03 +01:00
atmel ALSA: atmel: Convert to snd_card_new() with a device pointer 2014-02-14 08:14:04 +01:00
core Merge branch 'for-next' into for-linus 2014-03-31 12:16:31 +02:00
drivers ALSA: drivers: Convert to snd_card_new() with a device pointer 2014-02-12 10:58:20 +01:00
firewire ALSA: firewire: Convert to snd_card_new() with a device pointer 2014-02-14 08:13:31 +01:00
i2c ALSA: cs8427: separate HW initialization 2014-04-03 14:59:48 +02:00
isa Kconfig: rename HAS_IOPORT to HAS_IOPORT_MAP 2014-04-07 16:36:11 -07:00
mips ALSA: au1x00: use module_platform_driver() 2014-04-09 10:02:14 +02:00
oss sound fixes for 3.15-rc1 2014-04-10 09:19:44 -07:00
parisc ALSA: parisc: Convert to snd_card_new() with a device pointer 2014-02-14 08:14:05 +01:00
pci sound fixes for 3.15-rc1 2014-04-10 09:19:44 -07:00
pcmcia ALSA: pcmcia: Convert to snd_card_new() with a device pointer 2014-02-14 08:14:06 +01:00
ppc ALSA: ppc: Convert to snd_card_new() with a device pointer 2014-02-14 08:14:06 +01:00
sh ALSA: sh: Convert to snd_card_new() with a device pointer 2014-02-14 08:14:07 +01:00
soc ASoC: fsl_sai: Fix buggy configurations in trigger() 2014-04-14 17:26:05 +01:00
sparc ALSA: sparc: Convert to snd_card_new() with a device pointer 2014-02-14 08:14:07 +01:00
spi ALSA: spi: Convert to snd_card_new() with a device pointer 2014-02-14 08:14:08 +01:00
synth
usb ALSA: usb-audio: Suppress repetitive debug messages from retire_playback_urb() 2014-04-09 21:07:38 +02:00
Kconfig
Makefile
ac97_bus.c
last.c
sound_core.c consolidate the reassignments of ->f_op in ->open() instances 2013-10-24 23:34:53 -04:00
sound_firmware.c