]> git.alsa-project.org Git - alsa-ucm-conf.git/commitdiff
USB-Audio: Add support for RME Fireface UCX II
authorMikael Voss <mvs@nyantec.com>
Thu, 13 Feb 2025 22:34:38 +0000 (23:34 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 21 Mar 2025 18:00:18 +0000 (19:00 +0100)
Closes: https://github.com/alsa-project/alsa-ucm-conf/pull/509
Signed-off-by: Mikael Voss <mvs@nyantec.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
ucm2/USB-Audio/RME/Fireface-UCX-II-HiFi.conf [new file with mode: 0644]
ucm2/USB-Audio/RME/Fireface-UCX-II.conf [new file with mode: 0644]
ucm2/USB-Audio/USB-Audio.conf

diff --git a/ucm2/USB-Audio/RME/Fireface-UCX-II-HiFi.conf b/ucm2/USB-Audio/RME/Fireface-UCX-II-HiFi.conf
new file mode 100644 (file)
index 0000000..a81ee43
--- /dev/null
@@ -0,0 +1,636 @@
+Include.pcm_split.File "/common/pcm/split.conf"
+
+# This profile only exposes the most common channel configurations to limit
+# combinatorial complexity:
+#
+#  - Analog line outputs in stereo as well as 4.0 and 5.1 surround,
+#  - analog microphone and instrument inputs in mono only,
+#  - ADAT outputs and inputs in direct 8‐channel mapping, and
+#  - all other outputs and inputs in stereo.
+
+Macro [
+       {
+               SplitPCM {
+                       Name "ucx2_stereo_out"
+                       Direction Playback
+                       Format S24_3LE
+                       Channels 2
+                       HWChannels 20
+                       HWChannelPos0 FL
+                       HWChannelPos1 FR
+                       HWChannelPos2 FL
+                       HWChannelPos3 FR
+                       HWChannelPos4 FL
+                       HWChannelPos5 FR
+                       HWChannelPos6 FL
+                       HWChannelPos7 FR
+                       HWChannelPos8 FL
+                       HWChannelPos9 FR
+                       HWChannelPos10 FL
+                       HWChannelPos11 FR
+                       HWChannelPos12 FL
+                       HWChannelPos13 FR
+                       HWChannelPos14 FL
+                       HWChannelPos15 FR
+                       HWChannelPos16 FL
+                       HWChannelPos17 FR
+                       HWChannelPos18 FL
+                       HWChannelPos19 FR
+               }
+       }
+       {
+               SplitPCM {
+                       Name "ucx2_surround40_out"
+                       Direction Playback
+                       Format S24_3LE
+                       Channels 4
+                       HWChannels 20
+                       HWChannelPos0 FL
+                       HWChannelPos1 FR
+                       HWChannelPos2 RL
+                       HWChannelPos3 RR
+                       HWChannelPos4 UNKNOWN
+                       HWChannelPos5 UNKNOWN
+                       HWChannelPos6 UNKNOWN
+                       HWChannelPos7 UNKNOWN
+                       HWChannelPos8 UNKNOWN
+                       HWChannelPos9 UNKNOWN
+                       HWChannelPos10 UNKNOWN
+                       HWChannelPos11 UNKNOWN
+                       HWChannelPos12 FL
+                       HWChannelPos13 FR
+                       HWChannelPos14 RL
+                       HWChannelPos15 RR
+                       HWChannelPos16 FL
+                       HWChannelPos17 FR
+                       HWChannelPos18 RL
+                       HWChannelPos19 RR
+               }
+       }
+       {
+               SplitPCM {
+                       Name "ucx2_surround51_out"
+                       Direction Playback
+                       Format S24_3LE
+                       Channels 6
+                       HWChannels 20
+                       HWChannelPos0 FL
+                       HWChannelPos1 FR
+                       HWChannelPos2 RL
+                       HWChannelPos3 RR
+                       HWChannelPos4 FC
+                       HWChannelPos5 LFE
+                       HWChannelPos6 UNKNOWN
+                       HWChannelPos7 UNKNOWN
+                       HWChannelPos8 UNKNOWN
+                       HWChannelPos9 UNKNOWN
+                       HWChannelPos10 UNKNOWN
+                       HWChannelPos11 UNKNOWN
+                       HWChannelPos12 FL
+                       HWChannelPos13 FR
+                       HWChannelPos14 RL
+                       HWChannelPos15 RR
+                       HWChannelPos16 FC
+                       HWChannelPos17 LFE
+                       HWChannelPos18 UNKNOWN
+                       HWChannelPos19 UNKNOWN
+               }
+       }
+       {
+               SplitPCM {
+                       Name "ucx2_adat_out"
+                       Direction Playback
+                       Format S24_3LE
+                       Channels 8
+                       HWChannels 20
+                       HWChannelPos0 UNKNOWN
+                       HWChannelPos1 UNKNOWN
+                       HWChannelPos2 UNKNOWN
+                       HWChannelPos3 UNKNOWN
+                       HWChannelPos4 UNKNOWN
+                       HWChannelPos5 UNKNOWN
+                       HWChannelPos6 UNKNOWN
+                       HWChannelPos7 UNKNOWN
+                       HWChannelPos8 UNKNOWN
+                       HWChannelPos9 UNKNOWN
+                       HWChannelPos10 UNKNOWN
+                       HWChannelPos11 UNKNOWN
+                       HWChannelPos12 UNKNOWN
+                       HWChannelPos13 UNKNOWN
+                       HWChannelPos14 UNKNOWN
+                       HWChannelPos15 UNKNOWN
+                       HWChannelPos16 UNKNOWN
+                       HWChannelPos17 UNKNOWN
+                       HWChannelPos18 UNKNOWN
+                       HWChannelPos19 UNKNOWN
+               }
+       }
+       {
+               SplitPCM {
+                       Name "ucx2_mono_in"
+                       Direction Capture
+                       Format S24_3LE
+                       Channels 1
+                       HWChannels 20
+                       HWChannelPos0 MONO
+                       HWChannelPos1 MONO
+                       HWChannelPos2 MONO
+                       HWChannelPos3 MONO
+                       HWChannelPos4 MONO
+                       HWChannelPos5 MONO
+                       HWChannelPos6 MONO
+                       HWChannelPos7 MONO
+                       HWChannelPos8 MONO
+                       HWChannelPos9 MONO
+                       HWChannelPos10 MONO
+                       HWChannelPos11 MONO
+                       HWChannelPos12 MONO
+                       HWChannelPos13 MONO
+                       HWChannelPos14 MONO
+                       HWChannelPos15 MONO
+                       HWChannelPos16 MONO
+                       HWChannelPos17 MONO
+                       HWChannelPos18 MONO
+                       HWChannelPos19 MONO
+               }
+       }
+       {
+               SplitPCM {
+                       Name "ucx2_stereo_in"
+                       Direction Capture
+                       Format S24_3LE
+                       Channels 2
+                       HWChannels 20
+                       HWChannelPos0 FL
+                       HWChannelPos1 FR
+                       HWChannelPos2 FL
+                       HWChannelPos3 FR
+                       HWChannelPos4 FL
+                       HWChannelPos5 FR
+                       HWChannelPos6 FL
+                       HWChannelPos7 FR
+                       HWChannelPos8 FL
+                       HWChannelPos9 FR
+                       HWChannelPos10 FL
+                       HWChannelPos11 FR
+                       HWChannelPos12 FL
+                       HWChannelPos13 FR
+                       HWChannelPos14 FL
+                       HWChannelPos15 FR
+                       HWChannelPos16 FL
+                       HWChannelPos17 FR
+                       HWChannelPos18 FL
+                       HWChannelPos19 FR
+               }
+       }
+       {
+               SplitPCM {
+                       Name "ucx2_adat_in"
+                       Direction Capture
+                       Format S24_3LE
+                       Channels 8
+                       HWChannels 20
+                       HWChannelPos0 UNKNOWN
+                       HWChannelPos1 UNKNOWN
+                       HWChannelPos2 UNKNOWN
+                       HWChannelPos3 UNKNOWN
+                       HWChannelPos4 UNKNOWN
+                       HWChannelPos5 UNKNOWN
+                       HWChannelPos6 UNKNOWN
+                       HWChannelPos7 UNKNOWN
+                       HWChannelPos8 UNKNOWN
+                       HWChannelPos9 UNKNOWN
+                       HWChannelPos10 UNKNOWN
+                       HWChannelPos11 UNKNOWN
+                       HWChannelPos12 UNKNOWN
+                       HWChannelPos13 UNKNOWN
+                       HWChannelPos14 UNKNOWN
+                       HWChannelPos15 UNKNOWN
+                       HWChannelPos16 UNKNOWN
+                       HWChannelPos17 UNKNOWN
+                       HWChannelPos18 UNKNOWN
+                       HWChannelPos19 UNKNOWN
+               }
+       }
+]
+
+# Analog outputs
+
+SectionDevice.Headphones {
+       Comment "Headphones"
+
+       Value {
+               PlackbackPriority 255
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_out"
+               Direction Playback
+               HWChannels 20
+               Channels 2
+               Channel0 6
+               Channel1 7
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+SectionDevice."Line 1" {
+       Comment "Line Output 1+2"
+
+       Value {
+               PlackbackPriority 192
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_out"
+               Direction Playback
+               HWChannels 20
+               Channels 2
+               Channel0 0
+               Channel1 1
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+SectionDevice."Line 2" {
+       Comment "Line Output 3+4"
+
+       Value {
+               PlackbackPriority 191
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_out"
+               Direction Playback
+               HWChannels 20
+               Channels 2
+               Channel0 2
+               Channel1 3
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+SectionDevice."Line 3" {
+       Comment "Line Output 5+6"
+
+       Value {
+               PlackbackPriority 190
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_out"
+               Direction Playback
+               HWChannels 20
+               Channels 2
+               Channel0 4
+               Channel1 5
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+# Analog outputs in 4.0 surround configuration
+
+SectionDevice."Line 4" {
+       Comment "Line Output 1-4 (4.0 Surround)"
+
+       ConflictingDevice [
+               "Line 1"
+               "Line 2"
+       ]
+
+       Value {
+               PlackbackPriority 160
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_surround40_out"
+               Direction Playback
+               HWChannels 20
+               Channels 4
+               Channel0 0
+               Channel1 1
+               Channel2 2
+               Channel3 3
+               ChannelPos0 FL
+               ChannelPos1 FR
+               ChannelPos2 RL
+               ChannelPos3 RR
+       }
+}
+
+# Analog outputs in 5.1 surround configuration
+
+SectionDevice."Line 5" {
+       Comment "Line Output 1-6 (5.1 Surround)"
+
+       Value {
+               PlackbackPriority 144
+       }
+
+       ConflictingDevice [
+               "Line 1"
+               "Line 2"
+               "Line 3"
+               "Line 4"
+       ]
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_surround51_out"
+               Direction Playback
+               HWChannels 20
+               Channels 6
+               Channel0 0
+               Channel1 1
+               Channel2 2
+               Channel3 3
+               Channel4 4
+               Channel5 5
+               ChannelPos0 FL
+               ChannelPos1 FR
+               ChannelPos2 RL
+               ChannelPos3 RR
+               ChannelPos4 FC
+               ChannelPos5 LFE
+       }
+}
+
+# Analog inputs
+
+SectionDevice."Mic 1" {
+       Comment "Line Input 1 (Microphone)"
+
+       Value {
+               CapturePriority 176
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_mono_in"
+               Direction Capture
+               HWChannels 20
+               Channels 1
+               Channel0 0
+               ChannelPos0 MONO
+       }
+}
+
+SectionDevice."Mic 2" {
+       Comment "Line Input 2 (Microphone)"
+
+       Value {
+               CapturePriority 175
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_mono_in"
+               Direction Capture
+               HWChannels 20
+               Channels 1
+               Channel0 1
+               ChannelPos0 MONO
+       }
+}
+
+SectionDevice."Line 6" {
+       Comment "Line Input 3 (Instrument)"
+
+       Value {
+               CapturePriority 174
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_mono_in"
+               Direction Capture
+               HWChannels 20
+               Channels 1
+               Channel0 2
+               ChannelPos0 MONO
+       }
+}
+
+SectionDevice."Line 7" {
+       Comment "Line Input 4 (Instrument)"
+
+       Value {
+               CapturePriority 173
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_mono_in"
+               Direction Capture
+               HWChannels 20
+               Channels 1
+               Channel0 3
+               ChannelPos0 MONO
+       }
+}
+
+SectionDevice."Line 8" {
+       Comment "Line Input 5+6"
+
+       Value {
+               CapturePriority 172
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_in"
+               Direction Capture
+               HWChannels 20
+               Channels 2
+               Channel0 4
+               Channel1 5
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+SectionDevice."Line 9" {
+       Comment "Line Input 7+8"
+
+       Value {
+               CapturePriority 171
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_in"
+               Direction Capture
+               HWChannels 20
+               Channels 2
+               Channel0 6
+               Channel1 7
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+# Digital (consumer) outputs
+
+SectionDevice."SPDIF 1" {
+       Comment "AES3 (S/PDIF) Coax Output"
+
+       Value {
+               PlackbackPriority 112
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_out"
+               Direction Playback
+               HWChannels 20
+               Channels 2
+               Channel0 8
+               Channel1 9
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+SectionDevice."SPDIF 2" {
+       Comment "S/PDIF Optical Output"
+
+       ConflictingDevice [
+               "Direct 1"
+       ]
+
+       Value {
+               PlackbackPriority 111
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_out"
+               Direction Playback
+               HWChannels 20
+               Channels 2
+               Channel0 12
+               Channel1 13
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+# Digital (consumer) inputs
+
+SectionDevice."SPDIF 3" {
+       Comment "AES3 (S/PDIF) Coax Input"
+
+       Value {
+               CapturePriority 112
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_in"
+               Direction Capture
+               HWChannels 20
+               Channels 2
+               Channel0 8
+               Channel1 9
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+# Digital (professional) outputs
+
+SectionDevice."SPDIF 4" {
+       Comment "AES3 XLR Ouptut"
+
+       Value {
+               PlackbackPriority 80
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_out"
+               Direction Playback
+               HWChannels 20
+               Channels 2
+               Channel0 10
+               Channel1 11
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+SectionDevice."Direct 1" {
+       Comment "ADAT Optical Output"
+
+       Value {
+               PlackbackPriority 48
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_adat_out"
+               Direction Playback
+               HWChannels 20
+               Channels 8
+               Channel0 12
+               Channel1 13
+               Channel2 14
+               Channel3 15
+               Channel4 16
+               Channel5 17
+               Channel6 18
+               Channel7 19
+               ChannelPos0 UNKNOWN
+               ChannelPos1 UNKNOWN
+               ChannelPos2 UNKNOWN
+               ChannelPos3 UNKNOWN
+               ChannelPos4 UNKNOWN
+               ChannelPos5 UNKNOWN
+               ChannelPos6 UNKNOWN
+               ChannelPos7 UNKNOWN
+       }
+}
+
+# Digital (professional) inputs
+
+SectionDevice."SPDIF 5" {
+       Comment "AES3 (S/PDIF) XLR Input"
+
+       Value {
+               CapturePriority 80
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_stereo_in"
+               Direction Capture
+               HWChannels 20
+               Channels 2
+               Channel0 10
+               Channel1 11
+               ChannelPos0 FL
+               ChannelPos1 FR
+       }
+}
+
+SectionDevice."Direct 2" {
+       Comment "ADAT Optical Input"
+
+       Value {
+               CapturePriority 48
+       }
+
+       Macro.pcm_split.SplitPCMDevice {
+               Name "ucx2_adat_in"
+               Direction Capture
+               HWChannels 20
+               Channels 8
+               Channel0 12
+               Channel1 13
+               Channel2 14
+               Channel3 15
+               Channel4 16
+               Channel5 17
+               Channel6 18
+               Channel7 19
+               ChannelPos0 UNKNOWN
+               ChannelPos1 UNKNOWN
+               ChannelPos2 UNKNOWN
+               ChannelPos3 UNKNOWN
+               ChannelPos4 UNKNOWN
+               ChannelPos5 UNKNOWN
+               ChannelPos6 UNKNOWN
+               ChannelPos7 UNKNOWN
+       }
+}
diff --git a/ucm2/USB-Audio/RME/Fireface-UCX-II.conf b/ucm2/USB-Audio/RME/Fireface-UCX-II.conf
new file mode 100644 (file)
index 0000000..d1c977a
--- /dev/null
@@ -0,0 +1,39 @@
+Comment "Fireface UCX II"
+
+# The Fireface UCX II provides 20 playback and capture channels each:
+# - channels  0  to  7 are analog inputs and outputs
+# - channels  8 and  9 are AES3 (S/PDIF) via coax
+# - channels 10 and 11 are AES3 (S/PDIF) via XLR
+# - channels 12  to 19 are ADAT Optical Interface (8 channels)
+#                           or S/PDIF (output only, 12 and 13) via TOSLINK
+#
+# Physical connector layout:
+#  top to bottom, left to right, viewed from device front
+#
+# Front:
+# - 1 MIC / LINE: XLR / 1/4" TRS combo, balanced mono input, 48 V phantom power
+# - 2 MIC / LINE: XLR / 1/4" TRS combo, balanced mono input, 48 V phantom power
+# - 3 LINE / INSTR.: TRS 1/4", balanced mono input
+# - 4 LINE / INSTR.: TRS 1/4", balanced mono input
+# - Headphones symbol: TRS 1/4", unbalanced stereo output
+#
+# Back:
+# - LINE INPUTS (BALANCED) [5, 6; 7, 8]: TRS 1/4", balanced mono inputs
+# - LINE OUTPUTS (BALANCED) [1, 2; 3, 4; 5, 6]: TRS 1/4", balanced mono outputs
+# - ADAT IN: TOSLINK, ADAT Optical Interface
+# - ADATA OUT: TOSLINK, ADAT Optical Interface or S/PDIF
+# - AES/EBU & SPDIF: 9-pin D-Sub with breakout cable (2 RCA and 2 XLR)
+#   - RCA in: AES3 or S/PDIF (automatic)
+#   - RCA out: configurable for AES3 (Professional) or S/PDIF (Consumer)
+#   - XLR in: AES3 or S/PDIF (automatic)
+#   - XLR out: AES3 only
+
+SectionUseCase."HiFi" {
+       Comment "Default"
+       File "/USB-Audio/RME/Fireface-UCX-II-HiFi.conf"
+}
+
+Define.DirectPlaybackChannels 20
+Define.DirectCaptureChannels 20
+
+Include.dhw.File "/common/direct.conf"
index d2f61e24e32dbc982260c4876d9f7009f175b372..786dd5e4c3a8de4ea563304dc9baa2eb5bf352de 100644 (file)
@@ -475,6 +475,15 @@ If.id4-0009 {
        True.Define.ProfileName "Audient/Audient-iD4-0009"
 }
 
+If.fireface-ucx-ii {
+       Condition {
+               Type String
+               Haystack "${CardComponents}"
+               Needle "USB2a39:3fd9"
+       }
+       True.Define.ProfileName "RME/Fireface-UCX-II"
+}
+
 If.ua-volt2 {
        Condition {
                Type String