Discussion:
[PATCH] ALSA: usb-audio: Add quirk for Focusrite Scarlett 18i8
Chris J Arges
2013-07-17 21:12:12 UTC
Permalink
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.

Signed-off-by: Chris J Arges <***@gmail.com>
---
sound/usb/quirks-table.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)

diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index 7f1585b..b954ec5 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -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
+ }
+ }
+ }
+},

{
/*
--
1.7.9.5
Torstein Hegge
2013-07-17 23:53:23 UTC
Permalink
Post by 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/alsa-***@lists.sourceforge.net/msg29426.html
http://www.mail-archive.com/alsa-***@lists.sourceforge.net/msg27776.html
I'm guessing the 18i8 isn't that different.


Torstein
Post by Chris J Arges
---
sound/usb/quirks-table.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index 7f1585b..b954ec5 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -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
+ }
+ }
+ }
+},
{
/*
--
1.7.9.5
Chris J Arges
2013-07-18 15:16:29 UTC
Permalink
Post by Torstein Hegge
Post by 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
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,
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
Post by Torstein Hegge
Torstein
Post by Chris J Arges
---
sound/usb/quirks-table.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index 7f1585b..b954ec5 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -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
+ }
+ }
+ }
+},
{
/*
--
1.7.9.5
Takashi Iwai
2013-07-18 15:53:12 UTC
Permalink
At Thu, 18 Jul 2013 10:16:29 -0500,
Post by Chris J Arges
Post by Torstein Hegge
Post by 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
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,
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.
OK, thanks for a quick update.


Takashi

Loading...