linux/sound/core
Krzysztof Helt 8066e51ae7 ALSA: snd_dma_pointer workaround for chipsets with buggy DMA
The chipsets with the isa_dma_bridge_buggy set do not stop DMA during
DMA counter reads. The DMA counter is read in two 8-bit read steps
on x86 platform. Sometimes, such reads happen during higher byte
change so the lower byte is already decremented (rolled over) but
the higher byte is not. It introduces an error that position is
moved 256 bytes ahead of the true position. Thus, the next DMA
position read can return a lower value then the previous read.
If the DMA position is decreased (reversed) the ALSA subsystem is
tricked into the playback underrun error and resets the playback.
It results in a "pop" during a playback.

Work around the issue by reading the counter twice and choosing a higher
value.

Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-10-11 18:03:13 +02:00
..
oss Merge branch 'topic/oss' into for-linus 2009-09-10 15:32:58 +02:00
seq Merge branch 'topic/midi' into for-linus 2009-09-10 15:32:56 +02:00
control.c sound: snd_ctl_remove_user_ctl: prevent removal of kernel controls 2009-08-17 12:48:21 +02:00
control_compat.c ALSA: Kill snd_assert() in sound/core/* 2008-08-13 11:46:35 +02:00
device.c ALSA: Print function symbol in the error messages 2008-10-16 16:17:30 +02:00
hrtimer.c Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2008-12-30 16:16:21 -08:00
hwdep.c ALSA: hwdep - Make open callback optional 2009-02-05 09:10:20 +01:00
hwdep_compat.c [PATCH] hwdep_compat missed __user annotations 2006-10-10 15:37:21 -07:00
info.c Merge branch 'topic/dummy' into for-linus 2009-09-10 15:32:51 +02:00
info_oss.c ALSA: Kill snd_assert() in sound/core/* 2008-08-13 11:46:35 +02:00
init.c ALSA: Remove struct snd_monitor_file from public sound/core.h 2009-09-07 15:50:18 +02:00
isadma.c ALSA: snd_dma_pointer workaround for chipsets with buggy DMA 2009-10-11 18:03:13 +02:00
jack.c ALSA: use card device as parent for jack input-devices 2009-06-10 19:50:33 +02:00
Kconfig ALSA: Fix SG-buffer DMA with non-coherent architectures 2009-07-08 14:20:20 +02:00
Makefile ALSA: Fix SG-buffer DMA with non-coherent architectures 2009-07-08 14:20:20 +02:00
memalloc.c ALSA: Fix SG-buffer DMA with non-coherent architectures 2009-07-08 14:20:20 +02:00
memory.c [ALSA] Remove sound/driver.h 2008-01-31 17:29:48 +01:00
misc.c ALSA: Add debug module option 2009-08-27 17:42:08 +02:00
pcm.c ALSA: Re-export snd_pcm_format_name() function 2009-09-08 14:26:51 +02:00
pcm_compat.c ALSA: sound/core: use memdup_user() 2009-04-14 12:39:12 +02:00
pcm_lib.c Merge branch 'topic/pcm-drain-nonblock' into for-linus 2009-09-10 15:33:00 +02:00
pcm_memory.c ALSA: Fix SG-buffer DMA with non-coherent architectures 2009-07-08 14:20:20 +02:00
pcm_misc.c sound: add missing pcm kernel-doc 2008-10-18 11:05:36 +02:00
pcm_native.c Merge branch 'topic/pcm-estrpipe-in-pm' into for-linus 2009-09-10 15:33:02 +02:00
pcm_timer.c ALSA: Remove unneeded snd_pcm_substream.timer_lock 2009-03-09 14:02:00 +01:00
rawmidi.c sound: rawmidi: disable active-sensing-on-close by default 2009-07-15 11:57:20 +02:00
rawmidi_compat.c
rtctimer.c ALSA: hda - Convert from takslet_hi_schedule() to tasklet_schedule() 2008-12-18 12:17:55 +01:00
sgbuf.c ALSA: Fix vunmap and free order in snd_free_sgbuf_pages() 2009-03-18 08:04:01 +01:00
sound.c Check fops_get() return value 2009-01-06 15:59:11 -08:00
sound_oss.c ALSA: Kill snd_assert() in sound/core/* 2008-08-13 11:46:35 +02:00
timer.c ALSA: sound/core: use memdup_user() 2009-04-14 12:39:12 +02:00
timer_compat.c ALSA: Kill snd_assert() in sound/core/* 2008-08-13 11:46:35 +02:00
vmaster.c ALSA: Add new TLV types for dBwith min/max 2009-06-17 10:56:53 +02:00