Re: [BUG] snd-usb-audio: Audient iD14 (2708:0008) 20 dB channel imbalance

Takashi Iwai <[email protected]>
Newsgroups gmane.linux.sound
Message-ID <[email protected]>
On Tue, 11 Aug 2026 20:13:45 +0200,
Neil Andrews wrote:
> 
> On Tue, 11 Aug 2026, Takashi Iwai wrote:
> > It's fine to skip the volume if it actually improves -- so please test
> > it ;)
> >
> > Judging from your description, an alternative with keeping the volume
> > control would be to just rename it; the problem is that it's tied with
> > "Speaker".  You can name it a different, some non-standard one,
> > instead, too.
> 
> Hi Takashi,
> 
> I tested both on 7.1.6 with sound/usb rebuilt out of tree, measured with
> the loopback rig from the original report. Both fix it. I would suggest
> the rename.
> 
> Baseline, unpatched, PipeWire at 50% (control driven to 109/127):
> 18.00 dB imbalance.
> 
> 1. { 12, NULL }
> 
> Control gone, userspace falls back to software volume, 0.00 dB. So it
> does improve.
> 
> One wrinkle: FU 12 keeps its value across a module reload, so if the
> quirk arrives while the hardware is already attenuated, the imbalance
> stays and there is no longer a control with which to undo it (measured:
> 18.00 dB, control absent). Only a power cycle clears it, which matters
> for anyone whose saved ALSA state holds a value below 0 dB.
> 
> 2. { 12, "Monitor Mix Playback" }
> 
> --- a/sound/usb/mixer_maps.c
> +++ b/sound/usb/mixer_maps.c
> @@ -495,6 +495,19 @@
>  	{}
>  };
> 
> +/* Audient iD14: FU 12 advertises Volume on only 4 of its 6 logical channels
> + * and sits on the monitor-mixer branch, but it is traced through to the
> + * Speaker output terminal and gets named "Speaker Playback Volume". Userspace
> + * then adopts it as the stream's hardware volume, and any setting below 0 dB
> + * attenuates some channels but not others (20 dB imbalance at 80%). Give it a
> + * non-standard name so that it is no longer taken for the stream's master
> + * volume, while remaining reachable for anyone who wants the monitor gain.
> + */
> +static const struct usbmix_name_map audient_id14_map[] = {
> +	{ 12, "Monitor Mix Playback" },	/* FU, partial coverage */
> +	{}
> +};
> +
>  /*
>   * Control map entries
>   */
> @@ -579,6 +592,11 @@
>  		.map = maya44_map,
>  	},
>  	{
> +		/* Audient iD14 */
> +		.id = USB_ID(0x2708, 0x0008),
> +		.map = audient_id14_map,
> +	},
> +	{
>  		/* KEF X300A */
>  		.id = USB_ID(0x27ac, 0x1000),
>  		.map = scms_usb3318_map,
> 
> Gives numid=11,name='Monitor Mix Playback Volume'. PipeWire no longer
> picks it up (control stays at 127, 0.00 dB), and it still works when set
> deliberately, so an attenuated device can be recovered: 107 by hand
> gives 20.00 dB, back to 127 gives 0.00 dB. The name ends in "Playback"
> because a mapped name suppresses the automatic " Playback" but still
> gets " Volume" appended.
> 
> 3. A qualification to my report
> 
> I said userspace adopts the control as the card's hardware playback
> volume, without qualifying it. That is too broad.
> 
> alsa-ucm-conf 1.2.16.1 ships
> USB-Audio/Audient/Audient-iD14-HiFi-0008.conf, which splits the device
> into 2-channel sinks and declares no playback mixer element. With it in
> use PipeWire never touches FU 12: the control stays at 127 at every
> volume setting, on both split sinks and on the underlying node.
> Reproducing needs the ACP path instead, which I got by setting
> api.alsa.use-ucm = false for the device in WirePlumber (then 100% ->
> 127, 80% -> 122, 50% -> 109). All measurements above were taken that
> way.
> 
> So the affected set is narrower than I implied: the ACP path rather than
> that UCM profile, plus anyone whose saved ALSA state carries a value
> below 0 dB, since that is restored at boot either way. The descriptor
> problem itself is unchanged.
> 
> Happy to send either version as a proper patch with a Signed-off-by, and
> to test anything else on the hardware.

Let's take the rename approach, then.  Dropping can be done anytime
later if really needed, too.  Please submit a formal patch.


thanks,

Takashi
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.