[PATCH] ALSA: usb-audio: Fix Scarlett 8i6 Gen 1 router source numbering

From: Walter Weber

Date: Sun Oct 18 2026 - 07:22:31 EST


The router source numbering in s8i6_info is identical to the 6i6 entry
and was never verified on hardware (it is marked "untested..."). On a
Scarlett 8i6 1st Gen everything after the analog inputs is off by two:

- "SPDIF 1/2" select values 16/17, which carry no signal;
- "Mix A/B" select values 18/19, which are the actual S/PDIF inputs;
- "Mix C-F" select the actual Mix A-D, and Mix E/F cannot be
selected at all;
- the matrix inputs cannot be fed from S/PDIF.

The real numbering was measured on the device by routing known signals
(PCM test tones, mixes with distinct gains, an S/PDIF out-to-in
loopback) and checking which source value arrives in the capture
stream:

PCM 1-12 0-11
Analog 1-4 12-15
(no signal) 16-17
S/PDIF 1-2 18-19
Mix A-F 20-25

Correct the offsets and enum lengths accordingly, and update the
(currently unused) matrix_mux_init table to match. Values 16/17
remain as placeholders (shown as "Analog 5/6") since the enum maps
items to source values linearly.

The 6i6 entry uses the same layout and is also marked untested. It is
left unchanged since I have no 6i6 to verify it.

Tested on a Scarlett 8i6 1st Gen (bcdDevice 2.60) with v7.2.11.

Fixes: 76b188c4b370 ("ALSA: usb-audio: Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Walter Weber <walter.weber@xxxxxxxxxxxxxx>
---
sound/usb/mixer_scarlett.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/sound/usb/mixer_scarlett.c b/sound/usb/mixer_scarlett.c
index 6808730ef..ac0fb2e88 100644
--- a/sound/usb/mixer_scarlett.c
+++ b/sound/usb/mixer_scarlett.c
@@ -999,7 +999,11 @@ static const struct scarlett_device_info s6i6_info = {
}
};

-/* untested... */
+/*
+ * Router source numbering, measured on hardware: PCM 1-12 = 0-11,
+ * Analog 1-4 = 12-15, 16-17 carry no signal (shown as "Analog 5/6"),
+ * S/PDIF 1-2 = 18-19, Mix A-F = 20-25.
+ */
static const struct scarlett_device_info s8i6_info = {
.matrix_in = 18,
.matrix_out = 6,
@@ -1009,15 +1013,15 @@ static const struct scarlett_device_info s8i6_info = {

.opt_master = {
.start = -1,
- .len = 25,
- .offsets = {0, 12, 16, 18, 18},
+ .len = 27,
+ .offsets = {0, 12, 18, 20, 20},
.names = NULL
},

.opt_matrix = {
.start = -1,
- .len = 19,
- .offsets = {0, 12, 16, 18, 18},
+ .len = 21,
+ .offsets = {0, 12, 18, 20, 20},
.names = NULL
},

@@ -1034,7 +1038,7 @@ static const struct scarlett_device_info s8i6_info = {

.matrix_mux_init = {
12, 13, 14, 15, /* Analog -> 1..4 */
- 16, 17, /* SPDIF -> 5,6 */
+ 18, 19, /* SPDIF -> 5,6 */
0, 1, 2, 3, 4, 5, 6, 7, /* PCM[1..12] -> 7..18 */
8, 9, 10, 11
}
--
2.56.0