From: zachberger Date: Sat, 12 Sep 2026 19:23:24 +0000 (-0700) Subject: USB-Audio: fix channel count for SSL 2+ Mk II X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=4367278c4546ae5132daabe8ece79f1a900f25a5;p=alsa-ucm-conf.git USB-Audio: fix channel count for SSL 2+ Mk II The "SSL 2+ Mk II" reports the same USB product ID (31e9:0009) as the plain "SSL 2 Mk II", so the existing detection based on CardComponents and bcdDevice cannot tell them apart. It has more physical I/O though: 6 playback channels and 8 capture channels, vs 4/4 for the plain model. With the previous profile (DirectPlaybackChannels=4, DirectCaptureChannels=4), WirePlumber rejects the whole card: spa.alsa: Error in ALSA UCM profile for _ucm0003.hw:II,0 (HiFi: Line2: sink): PlaybackChannels=4 < avail 6 spa.alsa: Error in ALSA UCM profile for _ucm0003.hw:II,0 (HiFi: Mic2: source): CaptureChannels=4 < avail 8 spa.alsa: Errors in ALSA UCM profile for card SSL 2+ Mk II ...and it shows up as "SSL 2+ Mk II [ALSA UCM error]" in wpctl/sound pickers built on PipeWire. Disambiguate using the USB product string (which does carry the "+"), read via sys-card the same way bcdDevice already is, and set the correct channel counts for the confirmed "SSL 2+ Mk II" case. The If.chn4 gate in SSL2-HiFi.conf that builds the split Line1/Line2 output devices only matched DirectPlaybackChannels == "4" exactly. Broaden it to match "4" or "6" so the "+" Mk II also gets routed through the existing channel-splitting macros (which already use the variable dynamically and needed no other change). Tested against real "SSL 2+ Mk II" hardware (USB ID 31e9:0009, bcdDevice 0116, 6 playback / 8 capture channels per USB descriptors). Before: card flagged with [ALSA UCM error], no usable output. After: clean profile, Line1/Line2 both work as separate stereo outputs, Mic1/Mic2 both work as separate mono inputs. Not extended to the non-Mk-II "SSL 2+" since that hardware wasn't available to verify its channel counts also come out to 6/8. Closes: https://github.com/alsa-project/alsa-ucm-conf/pull/854 Signed-off-by: zachberger Signed-off-by: Jaroslav Kysela --- diff --git a/ucm2/USB-Audio/SolidStateLabs/SSL2-HiFi.conf b/ucm2/USB-Audio/SolidStateLabs/SSL2-HiFi.conf index 8e39b86..1fad5e8 100644 --- a/ucm2/USB-Audio/SolidStateLabs/SSL2-HiFi.conf +++ b/ucm2/USB-Audio/SolidStateLabs/SSL2-HiFi.conf @@ -15,9 +15,9 @@ Macro [ If.chn4 { Condition { - Type String - String1 "${var:DirectPlaybackChannels}" - String2 "4" + Type RegexMatch + String "${var:DirectPlaybackChannels}" + Regex "^(4|6)$" } True { Macro [ diff --git a/ucm2/USB-Audio/SolidStateLabs/SSL2.conf b/ucm2/USB-Audio/SolidStateLabs/SSL2.conf index 3df2fac..dfcbecb 100644 --- a/ucm2/USB-Audio/SolidStateLabs/SSL2.conf +++ b/ucm2/USB-Audio/SolidStateLabs/SSL2.conf @@ -23,6 +23,26 @@ If.fw { True.Define.DirectCaptureChannels 2 } +# The "SSL 2+ Mk II" shares the same USB product ID (31e9:0009) as the +# plain "SSL 2 Mk II", but has more physical I/O (6 playback / 8 capture +# channels vs 4/4), which the USB descriptors above cannot distinguish. +# Disambiguate using the USB product string instead, which does carry +# the "+". (Only verified against "SSL 2+ Mk II" hardware; not assumed +# to also apply to the non-Mk-II "SSL 2+".) +If.ssl2plusmk2 { + Condition { + Type RegexMatch + String "${sys-card:device/../product}" + Regex "SSL 2\\+ Mk II" + } + True { + Define { + DirectPlaybackChannels 6 + DirectCaptureChannels 8 + } + } +} + SectionUseCase."HiFi" { Comment "HiFi" File "/USB-Audio/SolidStateLabs/SSL2-HiFi.conf"