ALSA: emu10k1: enable bit-exact playback, part 3: pitch
authorOswald Buddenhagen <oswald.buddenhagen@gmx.de>
Thu, 18 May 2023 14:03:38 +0000 (16:03 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 18 May 2023 14:41:19 +0000 (16:41 +0200)
commit08e55ae996cbdbd76c3eb12fcad6cc79cba7ddbc
treec73f7ff93eec45ea080d289cc7cc1bac427bcd7f
parent5c2664cc09f94ba11c61908d5c7dac1c35d6dee8
ALSA: emu10k1: enable bit-exact playback, part 3: pitch

CPF_CURRENTPITCH starts swerving towards PTRX_PITCHTARGET as soon as
that is set. In practice this means that CPF_FRACADDRESS may acquire a
non-zero value before we manage to force CPF_CURRENTPITCH to the final
value, which would prevent bit-for-bit reproduction.

To avoid that this state persists, we now reset CPF_FRACADDRESS when
setting CPF_CURRENTPITCH, and to (mostly) avoid that it progresses too
far in the first place (possibly even reaching CCCA_CURRADDR), we write
PTRX and CPF in one critical section (though NMIs, etc. still make this
unreliable).

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Link: https://lore.kernel.org/r/20230518140339.3722279-2-oswald.buddenhagen@gmx.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/emu10k1/emupcm.c