aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2012-11-13 03:38:03 -0500
committerTakashi Iwai <tiwai@suse.de>2012-11-13 03:47:13 -0500
commit1762a59d8e8b5e99f6f4a0f292b40f3cacb108ba (patch)
tree98b43cc01fa9f3c5426e02c0d0c130a922a5a479 /sound/usb
parentb7838c2b91a5aae09d24e1110002097283055fb8 (diff)
ALSA: usb-audio: Add quirk for Focusrite Scarlett 18i6
Probing this device currently fails in snd_usb_audio_probe() because the call to snd_usb_create_mixer() fails. This is due to unknown or non-standard interface descriptor subtypes in parse_audio_unit(): usbaudio: unit 51: unexpected type 0x09 snd-usb-audio: probe of 1-8:1.0 failed with error -5 Some people are working around this by recompiling usb-audio with the call to snd_usb_create_mixer() commented out. It would be nice to avoid that. While the best idea would be to look into the mixer creation failure, a reasonable short-term solution is to use quirks to only probe the trouble-free interfaces. This allows audio and MIDI interfaces to be used without any obvious issues. Interface 0 is the main one to ignore. It contains lots of control-fu, including the unexpected interface descriptor subtypes. Interface 5 is for firmware updates and I'm not sure how to get support for this. Interface 3 is some sort of control interface that I don't understand: Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 3 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 1 Control Device bInterfaceProtocol 0 iInterface 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 1 (HEADER) bcdADC 1.00 wTotalLength 9 bInCollection 1 baInterfaceNr( 0) 1 Signed-off-by: Martin Schwenke <martin@meltin.net> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb')
-rw-r--r--sound/usb/quirks-table.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index 49c788d7de57..898e16c70b0c 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -2957,6 +2957,58 @@ YAMAHA_DEVICE(0x7010, "UB99"),
2957 2957
2958{ 2958{
2959 /* 2959 /*
2960 * Focusrite Scarlett 18i6
2961 *
2962 * Avoid mixer creation, which otherwise fails because some of
2963 * the interface descriptor subtypes for interface 0 are
2964 * unknown. That should be fixed or worked-around but this at
2965 * least allows the device to be used successfully with a DAW
2966 * and an external mixer. See comments below about other
2967 * ignored interfaces.
2968 */
2969 USB_DEVICE(0x1235, 0x8004),
2970 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
2971 .vendor_name = "Focusrite",
2972 .product_name = "Scarlett 18i6",
2973 .ifnum = QUIRK_ANY_INTERFACE,
2974 .type = QUIRK_COMPOSITE,
2975 .data = & (const struct snd_usb_audio_quirk[]) {
2976 {
2977 /* InterfaceSubClass 1 (Control Device) */
2978 .ifnum = 0,
2979 .type = QUIRK_IGNORE_INTERFACE
2980 },
2981 {
2982 .ifnum = 1,
2983 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2984 },
2985 {
2986 .ifnum = 2,
2987 .type = QUIRK_AUDIO_STANDARD_INTERFACE
2988 },
2989 {
2990 /* InterfaceSubClass 1 (Control Device) */
2991 .ifnum = 3,
2992 .type = QUIRK_IGNORE_INTERFACE
2993 },
2994 {
2995 .ifnum = 4,
2996 .type = QUIRK_MIDI_STANDARD_INTERFACE
2997 },
2998 {
2999 /* InterfaceSubClass 1 (Device Firmware Update) */
3000 .ifnum = 5,
3001 .type = QUIRK_IGNORE_INTERFACE
3002 },
3003 {
3004 .ifnum = -1
3005 }
3006 }
3007 }
3008},
3009
3010{
3011 /*
2960 * Some USB MIDI devices don't have an audio control interface, 3012 * Some USB MIDI devices don't have an audio control interface,
2961 * so we have to grab MIDI streaming interfaces here. 3013 * so we have to grab MIDI streaming interfaces here.
2962 */ 3014 */