• Sarah Bessmer's avatar
    ALSA: ctxfi - Work around emu20k1 glitch to prevent buffered sound data loss · e240a469
    Sarah Bessmer authored
    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: default avatarSarah Bessmer <aotos@fastmail.fm>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    e240a469
ctatc.c 42.1 KB