[v2] ALSA: usb-audio: Add MIDI support for Steinberg MI2/MI4
diff mbox

Message ID 55941B6D.7090503@bobobeach.com
State New
Headers show

Commit Message

Cyrus Harmon July 1, 2015, 4:55 p.m. UTC
As long as you're messing around with the quirks table, it would be nice 
to add support for the UR44. This was discussed on the list a while back 
and it wasn't clear why the quirk was needed, but it still seems to be 
needed, at least last I looked.

thanks,

Cyrus

  YAMAHA_DEVICE(0x2002, NULL),


On 07/01/2015 08:30 AM, Takashi Iwai wrote:
> At Tue, 30 Jun 2015 17:41:33 +0200,
> Dominic Sacré wrote:
>> The Steinberg MI2 and MI4 interfaces are compatible with the USB class
>> audio spec, but the MIDI part of the devices is reported as a vendor
>> specific interface.
>>
>> This patch adds entries to quirks-table.h to recognize the MIDI
>> endpoints. Audio functionality was already working and is unaffected by
>> this change.
>>
>> Signed-off-by: Dominic Sacré <dominic.sacre@gmx.de>
>> Signed-off-by: Albert Huitsing <albert@huitsing.nl>
> Applied now with Clemens' ack, and Cc to stable.
>
>
> thanks,
>
> Takashi
>
>> ---
>>   sound/usb/quirks-table.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 68 insertions(+)
>>
>> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
>> index 2f6d3e9..e475665 100644
>> --- a/sound/usb/quirks-table.h
>> +++ b/sound/usb/quirks-table.h
>> @@ -2512,6 +2512,74 @@ YAMAHA_DEVICE(0x7010, "UB99"),
>>   	}
>>   },
>>   
>> +/* Steinberg devices */
>> +{
>> +	/* Steinberg MI2 */
>> +	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
>> +	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
>> +		.ifnum = QUIRK_ANY_INTERFACE,
>> +		.type = QUIRK_COMPOSITE,
>> +		.data = & (const struct snd_usb_audio_quirk[]) {
>> +			{
>> +				.ifnum = 0,
>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>> +			},
>> +			{
>> +				.ifnum = 1,
>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>> +			},
>> +			{
>> +				.ifnum = 2,
>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>> +			},
>> +			{
>> +				.ifnum = 3,
>> +				.type = QUIRK_MIDI_FIXED_ENDPOINT,
>> +				.data = &(const struct snd_usb_midi_endpoint_info) {
>> +					.out_cables = 0x0001,
>> +					.in_cables  = 0x0001
>> +				}
>> +			},
>> +			{
>> +				.ifnum = -1
>> +			}
>> +		}
>> +	}
>> +},
>> +{
>> +	/* Steinberg MI4 */
>> +	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
>> +	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
>> +		.ifnum = QUIRK_ANY_INTERFACE,
>> +		.type = QUIRK_COMPOSITE,
>> +		.data = & (const struct snd_usb_audio_quirk[]) {
>> +			{
>> +				.ifnum = 0,
>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>> +			},
>> +			{
>> +				.ifnum = 1,
>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>> +			},
>> +			{
>> +				.ifnum = 2,
>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>> +			},
>> +			{
>> +				.ifnum = 3,
>> +				.type = QUIRK_MIDI_FIXED_ENDPOINT,
>> +				.data = &(const struct snd_usb_midi_endpoint_info) {
>> +					.out_cables = 0x0001,
>> +					.in_cables  = 0x0001
>> +				}
>> +			},
>> +			{
>> +				.ifnum = -1
>> +			}
>> +		}
>> +	}
>> +},
>> +
>>   /* TerraTec devices */
>>   {
>>   	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
>> -- 
>> 2.4.5
>>
>> _______________________________________________
>> Alsa-devel mailing list
>> Alsa-devel@alsa-project.org
>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

Comments

Takashi Iwai July 2, 2015, 5:42 a.m. UTC | #1
At Wed, 1 Jul 2015 09:55:09 -0700,
Cyrus Harmon wrote:
> 
> As long as you're messing around with the quirks table, it would be nice 
> to add support for the UR44. This was discussed on the list a while back 
> and it wasn't clear why the quirk was needed, but it still seems to be 
> needed, at least last I looked.

Well, I need to know it *is* needed or *seems* needed.  In the former
case, I'd happily take the patch.  If so, please submit the patch in a
formal way (with a patch description and your sign-off).


thanks,

Takashi


> 
> thanks,
> 
> Cyrus
> 
> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
> index 2f6d3e9..ed7875e 100644
> --- a/sound/usb/quirks-table.h
> +++ b/sound/usb/quirks-table.h
> @@ -466,6 +466,36 @@ YAMAHA_DEVICE(0x105d, NULL),
>                  }
>          }
>   },
> +{
> +       USB_DEVICE(0x0499, 0x150e),
> +       .driver_info = (unsigned long) & (const struct 
> snd_usb_audio_quirk) {
> +               /* .vendor_name = "Yamaha", */
> +               /* .product_name = "Steinberg UR44", */
> +               .ifnum = QUIRK_ANY_INTERFACE,
> +               .type = QUIRK_COMPOSITE,
> +               .data = (const struct snd_usb_audio_quirk[]) {
> +                       {
> +                               .ifnum = 1,
> +                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
> +                       },
> +                       {
> +                               .ifnum = 2,
> +                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
> +                       },
> +                       {
> +                               .ifnum = 3,
> +                               .type = QUIRK_MIDI_YAMAHA
> +                       },
> +                       {
> +                               .ifnum = 4,
> +                               .type = QUIRK_IGNORE_INTERFACE
> +                       },
> +                       {
> +                               .ifnum = -1
> +                       }
> +               }
> +       }
> +},
>   YAMAHA_DEVICE(0x2000, "DGP-7"),
>   YAMAHA_DEVICE(0x2001, "DGP-5"),
>   YAMAHA_DEVICE(0x2002, NULL),
> 
> 
> On 07/01/2015 08:30 AM, Takashi Iwai wrote:
> > At Tue, 30 Jun 2015 17:41:33 +0200,
> > Dominic Sacré wrote:
> >> The Steinberg MI2 and MI4 interfaces are compatible with the USB class
> >> audio spec, but the MIDI part of the devices is reported as a vendor
> >> specific interface.
> >>
> >> This patch adds entries to quirks-table.h to recognize the MIDI
> >> endpoints. Audio functionality was already working and is unaffected by
> >> this change.
> >>
> >> Signed-off-by: Dominic Sacré <dominic.sacre@gmx.de>
> >> Signed-off-by: Albert Huitsing <albert@huitsing.nl>
> > Applied now with Clemens' ack, and Cc to stable.
> >
> >
> > thanks,
> >
> > Takashi
> >
> >> ---
> >>   sound/usb/quirks-table.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++
> >>   1 file changed, 68 insertions(+)
> >>
> >> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
> >> index 2f6d3e9..e475665 100644
> >> --- a/sound/usb/quirks-table.h
> >> +++ b/sound/usb/quirks-table.h
> >> @@ -2512,6 +2512,74 @@ YAMAHA_DEVICE(0x7010, "UB99"),
> >>   	}
> >>   },
> >>   
> >> +/* Steinberg devices */
> >> +{
> >> +	/* Steinberg MI2 */
> >> +	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
> >> +	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
> >> +		.ifnum = QUIRK_ANY_INTERFACE,
> >> +		.type = QUIRK_COMPOSITE,
> >> +		.data = & (const struct snd_usb_audio_quirk[]) {
> >> +			{
> >> +				.ifnum = 0,
> >> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
> >> +			},
> >> +			{
> >> +				.ifnum = 1,
> >> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
> >> +			},
> >> +			{
> >> +				.ifnum = 2,
> >> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
> >> +			},
> >> +			{
> >> +				.ifnum = 3,
> >> +				.type = QUIRK_MIDI_FIXED_ENDPOINT,
> >> +				.data = &(const struct snd_usb_midi_endpoint_info) {
> >> +					.out_cables = 0x0001,
> >> +					.in_cables  = 0x0001
> >> +				}
> >> +			},
> >> +			{
> >> +				.ifnum = -1
> >> +			}
> >> +		}
> >> +	}
> >> +},
> >> +{
> >> +	/* Steinberg MI4 */
> >> +	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
> >> +	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
> >> +		.ifnum = QUIRK_ANY_INTERFACE,
> >> +		.type = QUIRK_COMPOSITE,
> >> +		.data = & (const struct snd_usb_audio_quirk[]) {
> >> +			{
> >> +				.ifnum = 0,
> >> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
> >> +			},
> >> +			{
> >> +				.ifnum = 1,
> >> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
> >> +			},
> >> +			{
> >> +				.ifnum = 2,
> >> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
> >> +			},
> >> +			{
> >> +				.ifnum = 3,
> >> +				.type = QUIRK_MIDI_FIXED_ENDPOINT,
> >> +				.data = &(const struct snd_usb_midi_endpoint_info) {
> >> +					.out_cables = 0x0001,
> >> +					.in_cables  = 0x0001
> >> +				}
> >> +			},
> >> +			{
> >> +				.ifnum = -1
> >> +			}
> >> +		}
> >> +	}
> >> +},
> >> +
> >>   /* TerraTec devices */
> >>   {
> >>   	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
> >> -- 
> >> 2.4.5
> >>
> >> _______________________________________________
> >> Alsa-devel mailing list
> >> Alsa-devel@alsa-project.org
> >> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> > _______________________________________________
> > Alsa-devel mailing list
> > Alsa-devel@alsa-project.org
> > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
Cyrus Harmon July 3, 2015, 1:47 a.m. UTC | #2
Sorry for the confusion. Turns out this patch is not required if one 
uses the device in "Class Compliant" mode. Performance seems to be 
better with Class Compliant mode on than CC mode off with the patch, so 
I suggest abandoning the patch.

thanks,

Cyrus

On 07/01/2015 10:42 PM, Takashi Iwai wrote:
> At Wed, 1 Jul 2015 09:55:09 -0700,
> Cyrus Harmon wrote:
>> As long as you're messing around with the quirks table, it would be nice
>> to add support for the UR44. This was discussed on the list a while back
>> and it wasn't clear why the quirk was needed, but it still seems to be
>> needed, at least last I looked.
> Well, I need to know it *is* needed or *seems* needed.  In the former
> case, I'd happily take the patch.  If so, please submit the patch in a
> formal way (with a patch description and your sign-off).
>
>
> thanks,
>
> Takashi
>
>
>> thanks,
>>
>> Cyrus
>>
>> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
>> index 2f6d3e9..ed7875e 100644
>> --- a/sound/usb/quirks-table.h
>> +++ b/sound/usb/quirks-table.h
>> @@ -466,6 +466,36 @@ YAMAHA_DEVICE(0x105d, NULL),
>>                   }
>>           }
>>    },
>> +{
>> +       USB_DEVICE(0x0499, 0x150e),
>> +       .driver_info = (unsigned long) & (const struct
>> snd_usb_audio_quirk) {
>> +               /* .vendor_name = "Yamaha", */
>> +               /* .product_name = "Steinberg UR44", */
>> +               .ifnum = QUIRK_ANY_INTERFACE,
>> +               .type = QUIRK_COMPOSITE,
>> +               .data = (const struct snd_usb_audio_quirk[]) {
>> +                       {
>> +                               .ifnum = 1,
>> +                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
>> +                       },
>> +                       {
>> +                               .ifnum = 2,
>> +                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
>> +                       },
>> +                       {
>> +                               .ifnum = 3,
>> +                               .type = QUIRK_MIDI_YAMAHA
>> +                       },
>> +                       {
>> +                               .ifnum = 4,
>> +                               .type = QUIRK_IGNORE_INTERFACE
>> +                       },
>> +                       {
>> +                               .ifnum = -1
>> +                       }
>> +               }
>> +       }
>> +},
>>    YAMAHA_DEVICE(0x2000, "DGP-7"),
>>    YAMAHA_DEVICE(0x2001, "DGP-5"),
>>    YAMAHA_DEVICE(0x2002, NULL),
>>
>>
>> On 07/01/2015 08:30 AM, Takashi Iwai wrote:
>>> At Tue, 30 Jun 2015 17:41:33 +0200,
>>> Dominic Sacré wrote:
>>>> The Steinberg MI2 and MI4 interfaces are compatible with the USB class
>>>> audio spec, but the MIDI part of the devices is reported as a vendor
>>>> specific interface.
>>>>
>>>> This patch adds entries to quirks-table.h to recognize the MIDI
>>>> endpoints. Audio functionality was already working and is unaffected by
>>>> this change.
>>>>
>>>> Signed-off-by: Dominic Sacré <dominic.sacre@gmx.de>
>>>> Signed-off-by: Albert Huitsing <albert@huitsing.nl>
>>> Applied now with Clemens' ack, and Cc to stable.
>>>
>>>
>>> thanks,
>>>
>>> Takashi
>>>
>>>> ---
>>>>    sound/usb/quirks-table.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++
>>>>    1 file changed, 68 insertions(+)
>>>>
>>>> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
>>>> index 2f6d3e9..e475665 100644
>>>> --- a/sound/usb/quirks-table.h
>>>> +++ b/sound/usb/quirks-table.h
>>>> @@ -2512,6 +2512,74 @@ YAMAHA_DEVICE(0x7010, "UB99"),
>>>>    	}
>>>>    },
>>>>    
>>>> +/* Steinberg devices */
>>>> +{
>>>> +	/* Steinberg MI2 */
>>>> +	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
>>>> +	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
>>>> +		.ifnum = QUIRK_ANY_INTERFACE,
>>>> +		.type = QUIRK_COMPOSITE,
>>>> +		.data = & (const struct snd_usb_audio_quirk[]) {
>>>> +			{
>>>> +				.ifnum = 0,
>>>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>>>> +			},
>>>> +			{
>>>> +				.ifnum = 1,
>>>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>>>> +			},
>>>> +			{
>>>> +				.ifnum = 2,
>>>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>>>> +			},
>>>> +			{
>>>> +				.ifnum = 3,
>>>> +				.type = QUIRK_MIDI_FIXED_ENDPOINT,
>>>> +				.data = &(const struct snd_usb_midi_endpoint_info) {
>>>> +					.out_cables = 0x0001,
>>>> +					.in_cables  = 0x0001
>>>> +				}
>>>> +			},
>>>> +			{
>>>> +				.ifnum = -1
>>>> +			}
>>>> +		}
>>>> +	}
>>>> +},
>>>> +{
>>>> +	/* Steinberg MI4 */
>>>> +	USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
>>>> +	.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
>>>> +		.ifnum = QUIRK_ANY_INTERFACE,
>>>> +		.type = QUIRK_COMPOSITE,
>>>> +		.data = & (const struct snd_usb_audio_quirk[]) {
>>>> +			{
>>>> +				.ifnum = 0,
>>>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>>>> +			},
>>>> +			{
>>>> +				.ifnum = 1,
>>>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>>>> +			},
>>>> +			{
>>>> +				.ifnum = 2,
>>>> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>>>> +			},
>>>> +			{
>>>> +				.ifnum = 3,
>>>> +				.type = QUIRK_MIDI_FIXED_ENDPOINT,
>>>> +				.data = &(const struct snd_usb_midi_endpoint_info) {
>>>> +					.out_cables = 0x0001,
>>>> +					.in_cables  = 0x0001
>>>> +				}
>>>> +			},
>>>> +			{
>>>> +				.ifnum = -1
>>>> +			}
>>>> +		}
>>>> +	}
>>>> +},
>>>> +
>>>>    /* TerraTec devices */
>>>>    {
>>>>    	USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
>>>> -- 
>>>> 2.4.5
>>>>
>>>> _______________________________________________
>>>> Alsa-devel mailing list
>>>> Alsa-devel@alsa-project.org
>>>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>>> _______________________________________________
>>> Alsa-devel mailing list
>>> Alsa-devel@alsa-project.org
>>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>> _______________________________________________
>> Alsa-devel mailing list
>> Alsa-devel@alsa-project.org
>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

Patch
diff mbox

diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index 2f6d3e9..ed7875e 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -466,6 +466,36 @@  YAMAHA_DEVICE(0x105d, NULL),
                 }
         }
  },
+{
+       USB_DEVICE(0x0499, 0x150e),
+       .driver_info = (unsigned long) & (const struct 
snd_usb_audio_quirk) {
+               /* .vendor_name = "Yamaha", */
+               /* .product_name = "Steinberg UR44", */
+               .ifnum = QUIRK_ANY_INTERFACE,
+               .type = QUIRK_COMPOSITE,
+               .data = (const struct snd_usb_audio_quirk[]) {
+                       {
+                               .ifnum = 1,
+                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
+                       },
+                       {
+                               .ifnum = 2,
+                               .type = QUIRK_AUDIO_STANDARD_INTERFACE
+                       },
+                       {
+                               .ifnum = 3,
+                               .type = QUIRK_MIDI_YAMAHA
+                       },
+                       {
+                               .ifnum = 4,
+                               .type = QUIRK_IGNORE_INTERFACE
+                       },
+                       {
+                               .ifnum = -1
+                       }
+               }
+       }
+},
  YAMAHA_DEVICE(0x2000, "DGP-7"),
  YAMAHA_DEVICE(0x2001, "DGP-5"),