Re: [PATCH v4 0/3] ALSA: usb-audio: Add QUIRK_FLAG_MIXER_GET_CUR_BROKEN

From: Rong Zhang

Date: Sun May 31 2026 - 11:56:02 EST


Hi Takashi,

On Sun, 2026-05-31 at 17:50 +0200, Takashi Iwai wrote:
> On Sun, 31 May 2026 17:45:19 +0200,
> Rong Zhang wrote:
> >
> > 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.
> >
> > The Sennheiser MOMENTUM 3 and Edifier MF200 need the quirk flag. Though
> > their UAC mixers respond to SET_CUR by tuning the volume, the
> > corresponding GET_CUR methods are somehow stubbed and return constant
> > values, resulting in them being disabled by the sticky check.
> >
> > Signed-off-by: Rong Zhang <i@xxxxxxxx>
> > ---
> > Changes in v4:
> > - Rebase since a patch improving the error path of the sticky check has
> > been applied earlier
> > - https://patch.msgid.link/20260531-uac-sticky-error-path-v1-1-12c2329d17ef@xxxxxxxx
> > - Integrate a follow-up series into this one
> > - https://patch.msgid.link/20260531-uac-edifier-mf200-v1-0-be69657c3f87@xxxxxxxx
> > - Link to v3: https://patch.msgid.link/20260529-uac-quirk-get-cur-vol-v3-0-bde363188ca4@xxxxxxxx
> >
> > Changes in v3:
> > - Make the log less noisy (thanks Takashi Iwai)
> > - Do not propagate mixer values written by sanity checks when GET_CUR is
> > broken, nor restore the garbage backed-up value. Instead, rely on
> > init_cur_mix_raw() to initialize the mixer properly
> > - Gate cache invalidation as well, so that the current volume is always
> > available to userspace
> > - Update the comment of check_sticky_volume_control()
> > - Link to v2: https://patch.msgid.link/20260528-uac-quirk-get-cur-vol-v2-0-84d3c8f48150@xxxxxxxx
> >
> > Changes in v2:
> > - Turn the approach into a less radical one
> > - Rename the quirk flag to QUIRK_FLAG_MIXER_GET_CUR_BROKEN
> > - Add a flag `get_cur_broken' to `struct usb_mixer_elem_info'
> > - When the sticky check fails, check quirk flags. Gate further GET_CUR
> > by setting `cval->get_cur_broken' if QUIRK_FLAG_MIXER_GET_CUR_BROKEN
> > is set, otherwise disable the mixer as usual
> > - The quirk flag still applies to all mixers, but as long as a mixer
> > makes the sticky check happy, it won't be affected at all. Only
> > those mixers with constant GET_CUR values will have their GET_CUR
> > gated. I assume the impact is minimal, since it's very unlikely a
> > device would have sticky mixers (broken SET_CUR) along with mixers
> > with working SET_CUR but broken GET_CUR at the same time
> > - Link to v1: https://patch.msgid.link/20260527-uac-quirk-get-cur-vol-v1-0-e9362b712e5e@xxxxxxxx
> >
> > ---
> > Rong Zhang (3):
> > ALSA: usb-audio: Add QUIRK_FLAG_MIXER_GET_CUR_BROKEN
> > ALSA: usb-audio: Add quirk flag for Sennheiser MOMENTUM 3
> > ALSA: usb-audio: Add quirk flag for Edifier MF200
>
> Now took all three patches onto for-next branch. Thanks.

Thanks a lot! :)

Thanks,
Rong

>
>
> Takashi