Skip to contentSkip to conversation

ALSA: usb-audio: Add quirk for Focusrite Scarlett 18i8

PATCH In review Chris J Arges 3 participants 4 messages Jul 17, 2013 – Jul 18, 2013 Sound

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ALSA: usb-audio: Add quirk for Focusrite Scarlett 18i8

This patch is similar to commit 1762a59d8e8b5e99f6f4a0f292b40f3cacb108ba. The same non-standard interface descriptor causes snd_usb_create_mixer() to fail for the Focusrite Scarlett 18i8 as well.

---
 sound/usb/quirks-table.h |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
sound/usb/quirks-table.h +46 -0
index 7f1585b..b954ec5 100644
@@ -3232,6 +3232,52 @@ YAMAHA_DEVICE(0x7010, "UB99"),
 		}
 	}
 },
+{
+	/*
+	 * Focusrite Scarlett 18i8
+	 *
+	 * Avoid mixer creation similar to the Scarlett 18i6 interface.
+	 */
+	USB_DEVICE(0x1235, 0x8014),
+	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+		.vendor_name = "Focusrite",
+		.product_name = "Scarlett 18i8",
+		.ifnum = QUIRK_ANY_INTERFACE,
+		.type = QUIRK_COMPOSITE,
+		.data = & (const struct snd_usb_audio_quirk[]) {
+			{
+				/* InterfaceSubClass 1 (Control Device) */
+				.ifnum = 0,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+			{
+				.ifnum = 1,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				.ifnum = 2,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				/* InterfaceSubClass 1 (Control Device) */
+				.ifnum = 3,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+			{
+				.ifnum = 4,
+				.type = QUIRK_MIDI_STANDARD_INTERFACE
+			},
+			{
+				/* InterfaceSubClass 1 (Device Firmware Update) */
+				.ifnum = 5,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+			{
+				.ifnum = -1
+			}
+		}
+	}
+},
 
 {
 	/*
Signature · 1 line
1.7.9.5
#1 lore raw
Quoted 3 lines · Chris J Arges

This patch is similar to commit 1762a59d8e8b5e99f6f4a0f292b40f3cacb108ba. The same non-standard interface descriptor causes snd_usb_create_mixer() to fail for the Focusrite Scarlett 18i8 as well.

Did you test this on a recent kernel? I don't think this quirk or the quirk introduced by 1762a59d "ALSA: usb-audio: Add quirk for Focusrite Scarlett 18i6" is necessary since kernel 3.9, as it includes:

4d7b86c98 "ALSA: snd-usb: mixer: propagate errors up the call chain" 83ea5d18d "ALSA: snd-usb: mixer: ignore -EINVAL in snd_usb_mixer_controls()" 61ac51301 "ALSA: usb: Parse UAC2 extension unit like for UAC1"

Those were tested on a Focusrite Scarlett 8i6, but the lsusb output from 18i6 and 8i6 looks similar,
http://www.mail-archive.com/[email protected]/msg29426.html
http://www.mail-archive.com/[email protected]/msg27776.html
I'm guessing the 18i8 isn't that different.

Torstein

Quoted 63 lines
---
 sound/usb/quirks-table.h |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
sound/usb/quirks-table.h +46 -0
index 7f1585b..b954ec5 100644
@@ -3232,6 +3232,52 @@ YAMAHA_DEVICE(0x7010, "UB99"),
 		}
 	}
 },
+{
+	/*
+	 * Focusrite Scarlett 18i8
+	 *
+	 * Avoid mixer creation similar to the Scarlett 18i6 interface.
+	 */
+	USB_DEVICE(0x1235, 0x8014),
+	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+		.vendor_name = "Focusrite",
+		.product_name = "Scarlett 18i8",
+		.ifnum = QUIRK_ANY_INTERFACE,
+		.type = QUIRK_COMPOSITE,
+		.data = & (const struct snd_usb_audio_quirk[]) {
+			{
+				/* InterfaceSubClass 1 (Control Device) */
+				.ifnum = 0,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+			{
+				.ifnum = 1,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				.ifnum = 2,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				/* InterfaceSubClass 1 (Control Device) */
+				.ifnum = 3,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+			{
+				.ifnum = 4,
+				.type = QUIRK_MIDI_STANDARD_INTERFACE
+			},
+			{
+				/* InterfaceSubClass 1 (Device Firmware Update) */
+				.ifnum = 5,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+			{
+				.ifnum = -1
+			}
+		}
+	}
+},
 
 {
 	/*
Signature · 1 line
1.7.9.5
#2 lore raw
Quoted 13 lines · Torstein Hegge
Quoted 3 lines · Chris J Arges

This patch is similar to commit 1762a59d8e8b5e99f6f4a0f292b40f3cacb108ba. The same non-standard interface descriptor causes snd_usb_create_mixer() to fail for the Focusrite Scarlett 18i8 as well.

Did you test this on a recent kernel? I don't think this quirk or the quirk introduced by 1762a59d "ALSA: usb-audio: Add quirk for Focusrite Scarlett 18i6" is necessary since kernel 3.9, as it includes:

4d7b86c98 "ALSA: snd-usb: mixer: propagate errors up the call chain" 83ea5d18d "ALSA: snd-usb: mixer: ignore -EINVAL in snd_usb_mixer_controls()" 61ac51301 "ALSA: usb: Parse UAC2 extension unit like for UAC1"

Quoted 6 lines

Those were tested on a Focusrite Scarlett 8i6, but the lsusb output from 18i6 and 8i6 looks similar,
http://www.mail-archive.com/[email protected]/msg29426.html
http://www.mail-archive.com/[email protected]/msg27776.html
I'm guessing the 18i8 isn't that different.

Re-testing this, I see that you are right. The mixer still doesn't work, but at least its usable for playback/recording/midi.
Ignore this patch then.

Thanks,
--chris j arges

Quoted 66 lines

Torstein

Quoted 63 lines
---
 sound/usb/quirks-table.h |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
sound/usb/quirks-table.h +46 -0
index 7f1585b..b954ec5 100644
@@ -3232,6 +3232,52 @@ YAMAHA_DEVICE(0x7010, "UB99"),
 		}
 	}
 },
+{
+	/*
+	 * Focusrite Scarlett 18i8
+	 *
+	 * Avoid mixer creation similar to the Scarlett 18i6 interface.
+	 */
+	USB_DEVICE(0x1235, 0x8014),
+	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
+		.vendor_name = "Focusrite",
+		.product_name = "Scarlett 18i8",
+		.ifnum = QUIRK_ANY_INTERFACE,
+		.type = QUIRK_COMPOSITE,
+		.data = & (const struct snd_usb_audio_quirk[]) {
+			{
+				/* InterfaceSubClass 1 (Control Device) */
+				.ifnum = 0,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+			{
+				.ifnum = 1,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				.ifnum = 2,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				/* InterfaceSubClass 1 (Control Device) */
+				.ifnum = 3,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+			{
+				.ifnum = 4,
+				.type = QUIRK_MIDI_STANDARD_INTERFACE
+			},
+			{
+				/* InterfaceSubClass 1 (Device Firmware Update) */
+				.ifnum = 5,
+				.type = QUIRK_IGNORE_INTERFACE
+			},
+			{
+				.ifnum = -1
+			}
+		}
+	}
+},
 
 {
 	/*
Signature · 1 line
1.7.9.5
#3 lore raw

At Thu, 18 Jul 2013 10:16:29 -0500,

Quoted 22 lines · Chris J Arges
Quoted 13 lines · Torstein Hegge
Quoted 3 lines · Chris J Arges

This patch is similar to commit 1762a59d8e8b5e99f6f4a0f292b40f3cacb108ba. The same non-standard interface descriptor causes snd_usb_create_mixer() to fail for the Focusrite Scarlett 18i8 as well.

Did you test this on a recent kernel? I don't think this quirk or the quirk introduced by 1762a59d "ALSA: usb-audio: Add quirk for Focusrite Scarlett 18i6" is necessary since kernel 3.9, as it includes:

4d7b86c98 "ALSA: snd-usb: mixer: propagate errors up the call chain" 83ea5d18d "ALSA: snd-usb: mixer: ignore -EINVAL in snd_usb_mixer_controls()" 61ac51301 "ALSA: usb: Parse UAC2 extension unit like for UAC1"

Quoted 6 lines

Those were tested on a Focusrite Scarlett 8i6, but the lsusb output from 18i6 and 8i6 looks similar,
http://www.mail-archive.com/[email protected]/msg29426.html
http://www.mail-archive.com/[email protected]/msg27776.html
I'm guessing the 18i8 isn't that different.

Quoted 3 lines

Re-testing this, I see that you are right. The mixer still doesn't work, but at least its usable for playback/recording/midi.
Ignore this patch then.

OK, thanks for a quick update.

Takashi