diff options
author | Martin Schwenke <martin@meltin.net> | 2012-11-13 03:38:03 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-11-13 03:47:13 -0500 |
commit | 1762a59d8e8b5e99f6f4a0f292b40f3cacb108ba (patch) | |
tree | 98b43cc01fa9f3c5426e02c0d0c130a922a5a479 /sound/usb | |
parent | b7838c2b91a5aae09d24e1110002097283055fb8 (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.h | 52 |
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 | */ |