ALSA: usb-audio: Playback and MIDI support for Novation Twitch DJ controller
The hardware also has a PCM capture device which is not implemented in this patch. It may be possible to generalise this to Saffire 6 USB support and some of the other Focusrite interfaces, but as I don't have access to these devices we should wait until capture support is working first. Capture support is not implemented because the code assumes the endpoint to have its own interface (instead, it shares the interface with playback) and some thought will be needed to lift this limitation. Signed-off-by: Mark Hills <mark@xwax.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
ba615b86d6
commit
5e212332cc
|
@ -2747,6 +2747,46 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
||||||
.type = QUIRK_MIDI_RAW_BYTES
|
.type = QUIRK_MIDI_RAW_BYTES
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
USB_DEVICE(0x1235, 0x0018),
|
||||||
|
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
|
||||||
|
.vendor_name = "Novation",
|
||||||
|
.product_name = "Twitch",
|
||||||
|
.ifnum = QUIRK_ANY_INTERFACE,
|
||||||
|
.type = QUIRK_COMPOSITE,
|
||||||
|
.data = (const struct snd_usb_audio_quirk[]) {
|
||||||
|
{
|
||||||
|
.ifnum = 0,
|
||||||
|
.type = QUIRK_AUDIO_FIXED_ENDPOINT,
|
||||||
|
.data = & (const struct audioformat) {
|
||||||
|
.formats = SNDRV_PCM_FMTBIT_S24_3LE,
|
||||||
|
.channels = 4,
|
||||||
|
.iface = 0,
|
||||||
|
.altsetting = 1,
|
||||||
|
.altset_idx = 1,
|
||||||
|
.attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
|
||||||
|
.endpoint = 0x01,
|
||||||
|
.ep_attr = USB_ENDPOINT_XFER_ISOC,
|
||||||
|
.rates = SNDRV_PCM_RATE_44100 |
|
||||||
|
SNDRV_PCM_RATE_48000,
|
||||||
|
.rate_min = 44100,
|
||||||
|
.rate_max = 48000,
|
||||||
|
.nr_rates = 2,
|
||||||
|
.rate_table = (unsigned int[]) {
|
||||||
|
44100, 48000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ifnum = 1,
|
||||||
|
.type = QUIRK_MIDI_RAW_BYTES
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ifnum = -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
|
USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
|
||||||
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
|
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
|
||||||
|
|
|
@ -445,6 +445,17 @@ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Novation Twitch DJ controller
|
||||||
|
*/
|
||||||
|
static int snd_usb_twitch_boot_quirk(struct usb_device *dev)
|
||||||
|
{
|
||||||
|
/* preemptively set up the device because otherwise the
|
||||||
|
* raw MIDI endpoints are not active */
|
||||||
|
usb_set_interface(dev, 0, 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This call will put the synth in "USB send" mode, i.e it will send MIDI
|
* This call will put the synth in "USB send" mode, i.e it will send MIDI
|
||||||
* messages through USB (this is disabled at startup). The synth will
|
* messages through USB (this is disabled at startup). The synth will
|
||||||
|
@ -746,6 +757,10 @@ int snd_usb_apply_boot_quirk(struct usb_device *dev,
|
||||||
/* Digidesign Mbox 2 */
|
/* Digidesign Mbox 2 */
|
||||||
return snd_usb_mbox2_boot_quirk(dev);
|
return snd_usb_mbox2_boot_quirk(dev);
|
||||||
|
|
||||||
|
case USB_ID(0x1235, 0x0018):
|
||||||
|
/* Focusrite Novation Twitch */
|
||||||
|
return snd_usb_twitch_boot_quirk(dev);
|
||||||
|
|
||||||
case USB_ID(0x133e, 0x0815):
|
case USB_ID(0x133e, 0x0815):
|
||||||
/* Access Music VirusTI Desktop */
|
/* Access Music VirusTI Desktop */
|
||||||
return snd_usb_accessmusic_boot_quirk(dev);
|
return snd_usb_accessmusic_boot_quirk(dev);
|
||||||
|
|
Loading…
Reference in a new issue