]> git.hungrycats.org Git - linux/commit
ALSA: usb-audio: Add QUIRK_FLAG_MIXER_GET_CUR_BROKEN
authorRong Zhang <i@rong.moe>
Sun, 31 May 2026 15:45:20 +0000 (23:45 +0800)
committerTakashi Iwai <tiwai@suse.de>
Sun, 31 May 2026 15:48:48 +0000 (17:48 +0200)
commitad2c7d2c42af943a3e711bdc1e4fd55b76fcbe55
tree56f28f4fe0f2c465a505cdd52292f0695fa5b584
parentf52b1b0506c6a209c10a741d031944d1ed19548c
ALSA: usb-audio: Add QUIRK_FLAG_MIXER_GET_CUR_BROKEN

Since commit 86aa1ea1f15c ("ALSA: usb-audio: Do not expose sticky
mixers"), the UAC mixer core utilizes volume SET_CUR and GET_CUR to
identify devices with sticky mixers. Unfortunately, even though most
devices with sticky GET_CUR also have corresponding sticky SET_CUR,
which I actually met more since the commit had been merged, there is
also a rare case that some devices may have volume mixers that responds
to SET_CUR properly but with its GET_CUR stubbed. This cause the sticky
check to consider the mixer to be sticky and unnecessarily disable it.

As the sticky check can't distinguish between sticky mixers and working
SET_CUR but broken GET_CUR, add QUIRK_FLAG_MIXER_GET_CUR_BROKEN to tell
that the device should fall into the second category when GET_CUR
returns a constant value. In this case, the sticky check becomes
non-fatal and only disables GET_CUR instead of the whole mixer. The
current volume will then be provided by the internal cache that stores
the last set volume.

An info message prompting users to check MIXER_GET_CUR_BROKEN for
potential sticky mixers is also added, so that users can learn how to do
some experiments to determine what's going on. If the mixer surprisingly
turns out to be non-sticky, they can submit a patch for a new quirk
table entry.

Signed-off-by: Rong Zhang <i@rong.moe>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20260531-uac-quirk-get-cur-vol-v4-1-ede643dca151@rong.moe
Documentation/sound/alsa-configuration.rst
sound/usb/mixer.c
sound/usb/mixer.h
sound/usb/quirks.c
sound/usb/usbaudio.h