[PATCH v3 0/8] ALSA: usb-audio: Add quirks for linear volume devices and deconflict VID

Rong Zhang posted 8 patches 1 month ago
Documentation/sound/alsa-configuration.rst |  7 ++
sound/usb/mixer.c                          | 84 +++++++++++++++++----
sound/usb/mixer_quirks.c                   | 56 ++++++++++++++
sound/usb/quirks.c                         | 85 ++++++++++++++++++++++
sound/usb/usbaudio.h                       | 12 +++
5 files changed, 229 insertions(+), 15 deletions(-)
[PATCH v3 0/8] ALSA: usb-audio: Add quirks for linear volume devices and deconflict VID
Posted by Rong Zhang 1 month ago
Some quirky devices tune their volume by linearly tuning the voltage
level (linear volume). In other words, such devices has a linear TLV
mapping of DECLARE_TLV_DB_LINEAR(scale, TLV_DB_GAIN_MUTE, 0).

The series mainly adds quirk flags MIXER_PLAYBACK_LINEAR_VOL and
MIXER_CAPTURE_LINEAR_VOL to represent this case respectively for
playback and capture mixers. Afterward, apply these quirk flags on them.

Some MV-SILICON devices with these quirks also have another quirk: VID
conflicts with Focusrite Novation (0x1235). Hence, add support for
string-descriptor-based quirk table entries and define an entry for MV-
SILICON to deconflict them.

Some improvements to the logic of volume range checks is also included
in the series to help identify quirky devices with linear volume.

Changes in v3:
- Adopt __free(kfree) on string buffers as it turns out to be able to
  handle ERR_PTR() gracefully (thanks Takashi Iwai)
- Improve readability by replacing the goto pattern with
  `p->usb_string_match && p->usb_string_match->*'. The compiler should
  generate equivalent control paths thanks to the optimizer
- Link to v2: https://lore.kernel.org/r/20260302185900.427415-1-i@rong.moe/

Changes in v2:
- Separate [PATCH v1 6/9] into https://lore.kernel.org/r/20260302173300.322673-1-i@rong.moe/
- Alloc string buffers with kmalloc() instead of on stack (thanks
  Takashi Iwai)
- Get string descriptors in a neater way (ditto)
- Tiny differences compared to Takashi's sugeestion:
  - Use `IS_ERR_OR_NULL() || strcmp()' instead of `!IS_ERR_OR_NULL() &&
    strcmp()', so failure in getting the string descriptor won't
    resulting in quirk flags being applied to irrelevant devices
  - Use trivial goto cleanup patterns instead of `__free(kfree)' as the
    latter can't handle ERR_PTR()
- Tiny differences compared to my previous reply:
  - Use usb_string() as Takashi suggested instead of usb_cache_string(),
    so that we can retrieve the errno and print it out on failure
- Link to v1: https://lore.kernel.org/r/20260301213726.428505-1-i@rong.moe/

Rong Zhang (8):
  Revert "ALSA: usb: Increase volume range that triggers a warning"
  ALSA: usb-audio: Add helper function for volume range checks
  ALSA: usb-audio: Improve volume range checks
  ALSA: usb-audio: Support string-descriptor-based quirk table entry
  ALSA: usb-audio: Deconflict VID between Focusrite Novation &
    MV-SILICON
  ALSA: usb-audio: Add QUIRK_FLAG_MIXER_{PLAYBACK,CAPTURE}_LINEAR_VOL
  ALSA: usb-audio: Add linear volume quirk for Hotone Audio Pulze Mini
  ALSA: usb-audio: Apply linear volume quirk on MV-SILICON devices

 Documentation/sound/alsa-configuration.rst |  7 ++
 sound/usb/mixer.c                          | 84 +++++++++++++++++----
 sound/usb/mixer_quirks.c                   | 56 ++++++++++++++
 sound/usb/quirks.c                         | 85 ++++++++++++++++++++++
 sound/usb/usbaudio.h                       | 12 +++
 5 files changed, 229 insertions(+), 15 deletions(-)


base-commit: 63082d085f52a3c77ef572d71d2d08c642da2a55
-- 
2.53.0
Re: [PATCH v3 0/8] ALSA: usb-audio: Add quirks for linear volume devices and deconflict VID
Posted by Takashi Iwai 1 month ago
On Tue, 03 Mar 2026 20:47:55 +0100,
Rong Zhang wrote:
> 
> Some quirky devices tune their volume by linearly tuning the voltage
> level (linear volume). In other words, such devices has a linear TLV
> mapping of DECLARE_TLV_DB_LINEAR(scale, TLV_DB_GAIN_MUTE, 0).
> 
> The series mainly adds quirk flags MIXER_PLAYBACK_LINEAR_VOL and
> MIXER_CAPTURE_LINEAR_VOL to represent this case respectively for
> playback and capture mixers. Afterward, apply these quirk flags on them.
> 
> Some MV-SILICON devices with these quirks also have another quirk: VID
> conflicts with Focusrite Novation (0x1235). Hence, add support for
> string-descriptor-based quirk table entries and define an entry for MV-
> SILICON to deconflict them.
> 
> Some improvements to the logic of volume range checks is also included
> in the series to help identify quirky devices with linear volume.
> 
> Changes in v3:
> - Adopt __free(kfree) on string buffers as it turns out to be able to
>   handle ERR_PTR() gracefully (thanks Takashi Iwai)
> - Improve readability by replacing the goto pattern with
>   `p->usb_string_match && p->usb_string_match->*'. The compiler should
>   generate equivalent control paths thanks to the optimizer
> - Link to v2: https://lore.kernel.org/r/20260302185900.427415-1-i@rong.moe/
> 
> Changes in v2:
> - Separate [PATCH v1 6/9] into https://lore.kernel.org/r/20260302173300.322673-1-i@rong.moe/
> - Alloc string buffers with kmalloc() instead of on stack (thanks
>   Takashi Iwai)
> - Get string descriptors in a neater way (ditto)
> - Tiny differences compared to Takashi's sugeestion:
>   - Use `IS_ERR_OR_NULL() || strcmp()' instead of `!IS_ERR_OR_NULL() &&
>     strcmp()', so failure in getting the string descriptor won't
>     resulting in quirk flags being applied to irrelevant devices
>   - Use trivial goto cleanup patterns instead of `__free(kfree)' as the
>     latter can't handle ERR_PTR()
> - Tiny differences compared to my previous reply:
>   - Use usb_string() as Takashi suggested instead of usb_cache_string(),
>     so that we can retrieve the errno and print it out on failure
> - Link to v1: https://lore.kernel.org/r/20260301213726.428505-1-i@rong.moe/
> 
> Rong Zhang (8):
>   Revert "ALSA: usb: Increase volume range that triggers a warning"
>   ALSA: usb-audio: Add helper function for volume range checks
>   ALSA: usb-audio: Improve volume range checks
>   ALSA: usb-audio: Support string-descriptor-based quirk table entry
>   ALSA: usb-audio: Deconflict VID between Focusrite Novation &
>     MV-SILICON
>   ALSA: usb-audio: Add QUIRK_FLAG_MIXER_{PLAYBACK,CAPTURE}_LINEAR_VOL
>   ALSA: usb-audio: Add linear volume quirk for Hotone Audio Pulze Mini
>   ALSA: usb-audio: Apply linear volume quirk on MV-SILICON devices

Applied all patches now to for-next branch.  Thanks.


Takashi