Commit 1762a59d8e8b5e99f6f4a0f292b40f3cacb108ba
Committed by
Takashi Iwai
1 parent
b7838c2b91
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
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>
Showing 1 changed file with 52 additions and 0 deletions Side-by-side Diff
sound/usb/quirks-table.h
... | ... | @@ -2957,6 +2957,58 @@ |
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 | 3012 | * Some USB MIDI devices don't have an audio control interface, |
2961 | 3013 | * so we have to grab MIDI streaming interfaces here. |
2962 | 3014 | */ |