[alsa-devel] [PATCH] ALSA: usb-audio: Add quirk for Focusrite Scarlett 18i6

Takashi Iwai tiwai at suse.de
Tue Nov 13 09:59:38 CET 2012


At Tue, 13 Nov 2012 19:38:03 +1100,
Martin Schwenke wrote:
> 
> On Tue, 13 Nov 2012 07:33:33 +0100, Takashi Iwai <tiwai at suse.de> wrote:
> 
> > Unfortunately your MUA broke lines so the patch cannot be applied
> > cleanly.  Please fix your MUA setup and resend, or use an attachment
> > if it doesn't work.
> 
> Sorry, that's irritating!  Is this better?
> 
> peace & happiness,
> martin
> 
> p.s. I can't see another way of adding a comment like this above the
> patch, other than the scissors thing that is processed by "git am -c".
> Sorry, I don't know how standard this is...

No problem, I applied the patch now.

Thanks.


Takashi

> 
> --8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--
> 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 at meltin.net>
> ---
>  sound/usb/quirks-table.h |   52 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 52 insertions(+)
> 
> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
> index 88d8ceb..c9dde5f 100644
> --- a/sound/usb/quirks-table.h
> +++ b/sound/usb/quirks-table.h
> @@ -2882,6 +2882,58 @@ YAMAHA_DEVICE(0x7010, "UB99"),
>  
>  {
>  	/*
> +	 * Focusrite Scarlett 18i6
> +	 *
> +	 * Avoid mixer creation, which otherwise fails because some of
> +	 * the interface descriptor subtypes for interface 0 are
> +	 * unknown.  That should be fixed or worked-around but this at
> +	 * least allows the device to be used successfully with a DAW
> +	 * and an external mixer.  See comments below about other
> +	 * ignored interfaces.
> +	 */
> +	USB_DEVICE(0x1235, 0x8004),
> +	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
> +		.vendor_name = "Focusrite",
> +		.product_name = "Scarlett 18i6",
> +		.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
> +			}
> +		}
> +	}
> +},
> +
> +{
> +	/*
>  	 * Some USB MIDI devices don't have an audio control interface,
>  	 * so we have to grab MIDI streaming interfaces here.
>  	 */
> -- 
> 1.7.10.4
> 


More information about the Alsa-devel mailing list