linux/sound/pci/ctxfi
Sarah Bessmer e240a46965 ALSA: ctxfi - Work around emu20k1 glitch to prevent buffered sound data loss
Occasionally, on playback stream ringbuffer wraparound, the EMU20K1
hardware will momentarily return 0 instead of the proper current(loop)
address. This patch handles that case, fixing the problem of playback
position corruption and subsequent loss of buffered sound data, that
occurs with some common buffering layout patterns(e.g. multiple
simultaneous output streams with differently-sized or
non-power-of-2-sized buffers).

An alternate means of fixing the problem would be to read the ca
register continuously, until two sequential reads return the same
value; however, that would be a more invasive change, has performance
implications, and isn't necessary unless there are also issues with the
value not being updated atomically in regards to individual bits or
something similar(which I have not encountered through light testing).

I have no EMU20K2 hardware to confirm if the issue is present there,
but even if it's not, this change shouldn't break anything that's not
already broken.

Signed-off-by: Sarah Bessmer <aotos@fastmail.fm>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-01-10 10:10:41 +01:00
..
ct20k1reg.h ALSA: ctxfi - Use native timer interrupt on emu20k1 2009-06-05 16:44:13 +02:00
ct20k2reg.h ALSA: ctxfi: Add support for Creative Titanium HD 2011-06-14 07:32:29 +02:00
ctamixer.c ALSA: ctxfi - Simple code clean up 2009-07-22 17:12:34 +02:00
ctamixer.h
ctatc.c ALSA: ctxfi - Work around emu20k1 glitch to prevent buffered sound data loss 2014-01-10 10:10:41 +01:00
ctatc.h ALSA: pci: remove __dev* attributes 2012-12-07 07:20:55 +01:00
ctdaio.c ALSA: ctxfi: Staticize local symbols 2013-09-13 14:36:09 +02:00
ctdaio.h ALSA: ctxfi: Add support for Creative Titanium HD 2011-06-14 07:32:29 +02:00
cthardware.c ALSA: ctxfi: Use WARN_ON() instead of BUG_ON() 2013-11-06 08:34:49 +01:00
cthardware.h ALSA: PCI: Replace CONFIG_PM with CONFIG_PM_SLEEP 2012-08-14 18:12:04 +02:00
cthw20k1.c ALSA: pci: remove __dev* attributes 2012-12-07 07:20:55 +01:00
cthw20k1.h
cthw20k2.c ALSA: pci: remove __dev* attributes 2012-12-07 07:20:55 +01:00
cthw20k2.h
ctimap.c ALSA: ctxfi - Remove useless initializations and cast 2009-06-08 14:57:57 +02:00
ctimap.h
ctmixer.c ALSA: PCI: Replace CONFIG_PM with CONFIG_PM_SLEEP 2012-08-14 18:12:04 +02:00
ctmixer.h ALSA: PCI: Replace CONFIG_PM with CONFIG_PM_SLEEP 2012-08-14 18:12:04 +02:00
ctpcm.c ALSA: Define more channel map positions 2012-09-12 18:13:03 +02:00
ctpcm.h
ctresource.c ALSA: ctxfi - Simple code clean up 2009-07-22 17:12:34 +02:00
ctresource.h
ctsrc.c ALSA: ctxf: Use kcalloc instead of kzalloc to allocate array 2011-12-06 13:27:22 +01:00
ctsrc.h
cttimer.c ALSA: module_param: make bool parameters really bool 2011-12-19 10:34:41 +01:00
cttimer.h ALSA: ctxfi - Use native timer interrupt on emu20k1 2009-06-05 16:44:13 +02:00
ctvmem.c ALSA: ctxfi: Fix typo in ctvmem.c 2012-02-23 18:28:49 +01:00
ctvmem.h ALSA: ctxfi: Bump playback substreams to 256 2011-08-24 10:39:44 +02:00
Makefile ALSA: ctxfi - Use native timer interrupt on emu20k1 2009-06-05 16:44:13 +02:00
xfi.c ALSA: PCI: Remove superfluous pci_set_drvdata(pci, NULL) at remove 2013-05-29 12:37:32 +02:00