--- /dev/null
+# 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 }
--- /dev/null
+# 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
+ }
+}
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'"