mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-13 07:08:21 -04:00
ALSA: emu10k1: skip needless setting of some voice registers
Many registers are meaningless for stereo slaves and the extra voices.
This patch cleans up these unnecessary register writes.
snd_emu10k1_playback_{trigger,stop}_voice() is not called for stereo
slaves any more.
snd_emu10k1_playback_prepare_voice() is renamed to
snd_emu10k1_playback_unmute_voice(), as this better reflects its
remaining function. It's not called for the extra voices any more.
Accordingly, snd_emu10k1_playback_mute_voice() is factored out from
snd_emu10k1_playback_stop_voice(), and is called selectively as well.
This doesn't add conditionals which would avoid initializing
sub-registers, as that wouldn't pull its weight.
Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Link: https://lore.kernel.org/r/20230516093612.3536451-6-oswald.buddenhagen@gmx.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
committed by
Takashi Iwai
parent
35a60d1edf
commit
77e067d0fa
@@ -404,6 +404,14 @@ SUB_REG(HCFG, LOCKTANKCACHE, 0x00000004) /* 1 = Cancel bustmaster accesses to ta
|
||||
// distortion), the modulation engine sets the target registers, towards
|
||||
// which the current registers "swerve" gradually.
|
||||
|
||||
// For the odd channel in a stereo pair, these registers are meaningless:
|
||||
// CPF_STEREO, CPF_CURRENTPITCH, PTRX_PITCHTARGET, CCR_CACHEINVALIDSIZE,
|
||||
// PSST_LOOPSTARTADDR, DSL_LOOPENDADDR, CCCA_CURRADDR
|
||||
// The somewhat non-obviously still meaningful ones are:
|
||||
// CPF_STOP, CPF_FRACADDRESS, CCR_READADDRESS (!),
|
||||
// CCCA_INTERPROM, CCCA_8BITSELECT (!)
|
||||
// (The envelope engine is ignored here, as stereo matters only for verbatim playback.)
|
||||
|
||||
#define CPF 0x00 /* Current pitch and fraction register */
|
||||
SUB_REG(CPF, CURRENTPITCH, 0xffff0000) /* Current pitch (linear, 0x4000 == unity pitch shift) */
|
||||
#define CPF_STEREO_MASK 0x00008000 /* 1 = Even channel interleave, odd channel locked */
|
||||
|
||||
Reference in New Issue
Block a user