]> git.alsa-project.org Git - alsa-ucm-conf.git/commitdiff
USB-Audio: Add Audient iD14 MkI profile (2708:0002)
authorwillyp713 <mrwillporter@gmail.com>
Sun, 23 Aug 2026 18:59:46 +0000 (13:59 -0500)
committerJaroslav Kysela <perex@perex.cz>
Fri, 9 Oct 2026 09:12:35 +0000 (11:12 +0200)
Expose two logical stereo USB playback pairs, two mono analogue inputs,
and a Direct use case for the raw 4-output/10-input stream.

The device firmware applies monitor-mix attenuation asymmetrically. Initialize
all four gains to unity on every boot or hotplug because the Direct use case
has no verb. Reapply unity when HiFi is selected. Support both the historical
Speaker Playback Volume name and the Monitor Mix Playback Volume name used
by the accepted kernel quirk.

Closes: https://github.com/alsa-project/alsa-ucm-conf/pull/836
Signed-off-by: willyp713 <mrwillporter@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
ucm2/USB-Audio/Audient/Audient-iD14-0002.conf [new file with mode: 0644]
ucm2/USB-Audio/Audient/Audient-iD14-HiFi-0002.conf [new file with mode: 0644]
ucm2/USB-Audio/USB-Audio.conf

diff --git a/ucm2/USB-Audio/Audient/Audient-iD14-0002.conf b/ucm2/USB-Audio/Audient/Audient-iD14-0002.conf
new file mode 100644 (file)
index 0000000..d53de7d
--- /dev/null
@@ -0,0 +1,32 @@
+# SPDX-License-Identifier: BSD-3-Clause
+
+Comment "Audient iD14 USB-Audio"
+
+# The iD14 firmware applies FU12 attenuation to the right channel of each
+# stereo pair but ignores the matching left-channel write.  Linux kernels with
+# the upstream mixer-map quirk call this control "Monitor Mix Playback Volume";
+# older kernels call it "Speaker Playback Volume".  Keep all four gains at
+# unity under either name.  This also restores a balanced state left by an
+# unquirked PipeWire session.
+Define.MonitorMixVolume "Speaker Playback Volume"
+
+If.renamed-monitor-mix-volume {
+       Condition {
+               Type ControlExists
+               Control "name='Monitor Mix Playback Volume'"
+       }
+       True.Define.MonitorMixVolume "Monitor Mix Playback Volume"
+}
+
+FixedBootSequence [
+       cset "name='${var:MonitorMixVolume}' 127,127,127,127"
+]
+
+SectionUseCase."HiFi" {
+       Comment "Default"
+       File "/USB-Audio/Audient/Audient-iD14-HiFi-0002.conf"
+}
+
+Include.dhw.File "/common/directm.conf"
+
+Macro.0.DirectUseCase { Id="Direct" PlaybackChannels=4 CaptureChannels=10 }
diff --git a/ucm2/USB-Audio/Audient/Audient-iD14-HiFi-0002.conf b/ucm2/USB-Audio/Audient/Audient-iD14-HiFi-0002.conf
new file mode 100644 (file)
index 0000000..902e9ba
--- /dev/null
@@ -0,0 +1,116 @@
+# SPDX-License-Identifier: BSD-3-Clause
+
+Include.pcm_split.File "/common/pcm/split.conf"
+
+SectionVerb {
+       EnableSequence [
+               cset "name='${var:MonitorMixVolume}' 127,127,127,127"
+       ]
+}
+
+Macro [
+       {
+               SplitPCM {
+                       Name "id14mk1_mono_in"
+                       Direction Capture
+                       Format S32_LE
+                       Channels 1
+                       HWChannels 10
+                       HWChannelPos0 MONO
+                       HWChannelPos1 MONO
+                       HWChannelPos2 MONO
+                       HWChannelPos3 MONO
+                       HWChannelPos4 MONO
+                       HWChannelPos5 MONO
+                       HWChannelPos6 MONO
+                       HWChannelPos7 MONO
+                       HWChannelPos8 MONO
+                       HWChannelPos9 MONO
+               }
+       }
+       {
+               SplitPCM {
+                       Name "id14mk1_stereo_out"
+                       Direction Playback
+                       Format S32_LE
+                       Channels 2
+                       HWChannels 4
+                       HWChannelPos0 FL
+                       HWChannelPos1 FR
+                       HWChannelPos2 FL
+                       HWChannelPos3 FR
+               }
+       }
+]
+
+SectionDevice."USB 1" {
+       Comment "Output 1/2"
+
+       Value {
+               PlaybackPriority 200
+               PlaybackChannels 2
+       }
+       Macro.pcm_split.SplitPCMDevice {
+               Name "id14mk1_stereo_out"
+               Direction Playback
+               HWChannels 4
+               Channels 2
+               Channel0 0
+               Channel1 1
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+SectionDevice."USB 2" {
+       Comment "Output 3/4"
+
+       Value {
+               PlaybackPriority 100
+               PlaybackChannels 2
+       }
+       Macro.pcm_split.SplitPCMDevice {
+               Name "id14mk1_stereo_out"
+               Direction Playback
+               HWChannels 4
+               Channels 2
+               Channel0 2
+               Channel1 3
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+SectionDevice."Mic1" {
+       Comment "Mic/Line Input 1"
+
+       Value {
+               CapturePriority 200
+               CaptureChannels 1
+       }
+       Macro.pcm_split.SplitPCMDevice {
+               Name "id14mk1_mono_in"
+               Direction Capture
+               HWChannels 10
+               Channels 1
+               Channel0 0
+               ChannelPos0 MONO
+       }
+}
+
+SectionDevice."Mic2" {
+       Comment "Mic/Line Input 2"
+
+       Value {
+               CapturePriority 100
+               CaptureChannels 1
+       }
+       Macro.pcm_split.SplitPCMDevice {
+               Name "id14mk1_mono_in"
+               Direction Capture
+               HWChannels 10
+               Channels 1
+               Channel0 1
+               ChannelPos0 MONO
+       }
+}
index 7a99e9cfffc04a681a7c3acae072c11a3953dcbe..a72487900d1198d0d28d02dd92e0be0b1ee00c74 100644 (file)
@@ -272,6 +272,7 @@ Macro.zedi10.StringMatch            "Id='22f0:0016' Profile='AllenAndHeath/Zedi10'"
 Macro.evo4-0006.StringMatch            "Id='2708:0006' Profile='Audient/Audient-EVO4-0006'"
 Macro.id4-0003.StringMatch             "Id='2708:0003' Profile='Audient/Audient-iD4-0003'"
 Macro.id4-0009.StringMatch             "Id='2708:0009' Profile='Audient/Audient-iD4-0009'"
+Macro.id14-0002.StringMatch            "Id='2708:0002' Profile='Audient/Audient-iD14-0002'"
 Macro.id14-0008.StringMatch            "Id='2708:0008' Profile='Audient/Audient-iD14-0008'"
 Macro.fireface-ucx.StringMatch         "Id='0424:3fb9' Profile='RME/Fireface-UCX'"
 Macro.fireface-ucx-ii.StringMatch      "Id='2a39:3fd9' Profile='RME/Fireface-UCX-II'"