[PATCH 2/4] ALSA: usb-audio: Apply MV-SILICON linear volume quirk per mixer
From: Rong Zhang
Date: Mon Oct 19 2026 - 16:19:44 EST
The snd_usb_mv_silicon_quirks() tries to apply both
MIXER_PLAYBACK_LINEAR_VOL and MIXER_CAPTURE_LINEAR_VOL on the device at
the same time, as long as one of the mixers fulfills val == 0/4096/1.
IOW, even if only one of them matches the control values, the linear
volume quirk applies to all mixers.
Apply the quirk by calling snd_usb_mixer_fu_quirk_linear_scale()
directly, so that the MV-SILICON quirk becomes mixer-wise. The existing
quirk flags are also checked to respect conflicting quirks.
Fixes: dfd4b0d46e77 ("ALSA: usb-audio: Apply linear volume quirk on MV-SILICON devices")
Signed-off-by: Rong Zhang <i@xxxxxxxx>
---
sound/usb/mixer_quirks.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
index e2f7ca4252e2..7e2cfb176348 100644
--- a/sound/usb/mixer_quirks.c
+++ b/sound/usb/mixer_quirks.c
@@ -4753,13 +4753,11 @@ static void snd_usb_mv_silicon_quirks(struct usb_mixer_interface *mixer,
/* The final effects will be printed later. */
usb_audio_info(mixer->chip, "applying MV-SILICON quirks (0/4096/1 variant)\n");
- /* Respect MIN_MUTE set by module parameters. */
- if (!(mixer->chip->quirk_flags & QUIRK_FLAG_MIXER_PLAYBACK_MIN_MUTE))
- mixer->chip->quirk_flags |= QUIRK_FLAG_MIXER_PLAYBACK_LINEAR_VOL;
- if (!(mixer->chip->quirk_flags & QUIRK_FLAG_MIXER_CAPTURE_MIN_MUTE))
- mixer->chip->quirk_flags |= QUIRK_FLAG_MIXER_CAPTURE_LINEAR_VOL;
+ if (deconflict_playback_tlv_quirks(mixer, kctl) ||
+ deconflict_capture_tlv_quirks(mixer, kctl))
+ snd_usb_mixer_fu_quirk_linear_scale(mixer, cval, kctl);
} else {
- usb_audio_dbg(mixer->chip, "not applying MV-SILICON quirks on unknown variant");
+ usb_audio_dbg(mixer->chip, "not applying MV-SILICON quirks on unknown variant\n");
}
}
--
2.55.0