Re: [alsa-devel] Digidesign Mbox2 - usb support
Hi,
I wrote an addition to usbquirks.h to provide support for "Digidesign Mbox 2" but I need someone to point me in the right direction as to which interfaces to use. I'm not sure if the MIDI interface is a standard device, and I'm not sure which interfaces to ignore. I am about to compile a new alsa + kernel with my changes to usbquirks.h to test the device.
Here is my usbquirks.h addition:
/* DIGIDESIGN MBOX 2 addition to usbquirks.h */
{ /* Damien Zammit damien.zammit@gmail.com * 16 August 2009 * * Interface topology of Digidesign Mbox 2, it has 7 interfaces: * 0 - Proprietary firmware updates * 1 - Audio control device * 2 - Double endpoint IN-OUT PCM * 3 - Double endpoint OUT-IN PCM * 4 - Single endpoint IEC1937 AC3 / PCM (selectable by altsetting) * 5 - Single endpoint PCM (supports full 24bit 48000Hz) * 6 - Triple endpoint MIDI (Interrupt + 1 IN + 1 OUT) * * As I am unsure which interfaces to try, I have provided _all_ the settings * I can in this file to hand to the usb-audio developers. * I have no idea what .altset_idx does or where to find it, so I set it to 1 in all cases. * * I am currently testing with just interfaces 5 and 6 (not sure if it will work) */ USB_DEVICE(0x0dba, 0x3000), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { .vendor_name = "Digidesign", .product_name = "Mbox 2", .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, .data = (const struct snd_usb_audio_quirk[]) { /* Proprietary firmware updater interface - ignore for now */ { .ifnum = 0, .type = QUIRK_IGNORE_INTERFACE },
/* Audio control interface - altsetting = 0 not sure what to do with this */ { .ifnum = 1, .type = QUIRK_IGNORE_INTERFACE }, { .ifnum = 2, .type = QUIRK_AUDIO_FIXED_ENDPOINT, .data = & (const struct audioformat) { .format = SNDDRV_PCM_FORMAT_S24_3LE, .channels = 2, .iface = 2, .altsetting = 3, /* 0 is also available but has no endpoints */ .altset_idx = 1, .endpoint = 0x03, /* IN or 0x83 OUT */ .ep_attr = 0x05, .rates = SNDRV_PCM_RATE_CONTINUOUS, .rate_min = 8000, .rate_max = 48000 } }, { .ifnum = 3, .type = QUIRK_AUDIO_FIXED_ENDPOINT, .data = & (const struct audioformat) { .format = SNDDRV_PCM_FORMAT_S24_3LE, .channels = 2, .iface = 3, .altsetting = 3, /* 0 is also available, but has no endpoints */ .altset_idx = 1, .endpoint = 0x04, /* OUT or 0x84 IN */ .ep_attr = 0x05, .rates = SNDRV_PCM_RATE_CONTINUOUS, .rate_min = 8000, .rate_max = 48000 } }, { .ifnum = 4, .type = QUIRK_AUDIO_FIXED_ENDPOINT, .data = & (const struct audioformat) { .format = <<<<< Type III - IEC1937_AC3 (16 bit) >>>>> .channels = 2, .iface = 3, .altsetting = 6, .altset_idx = 1, .endpoint = 0x04, .ep_attr = 0x05, .rates = SNDRV_PCM_RATE_CONTINUOUS, .rate_min = 8000, .rate_max = 48000 } }, { .ifnum = 5, .type = QUIRK_AUDIO_FIXED_ENDPOINT, .data = & (const struct audioformat) { .format = SNDDRV_PCM_FORMAT_S24_3LE, .channels = 2, .iface = 5, .altsetting = 3, .altset_idx = 1, .endpoint = 0x86, /* Single endpoint only */ .ep_attr = 0x0D, .rates = SNDRV_PCM_RATE_CONTINUOUS, .rate_min = 8000, .rate_max = 48000 } },
{
/* MIDI INTERFACE DESCRIPTION * Is this a standard USB MIDI device? * It has 2 Interface descriptors for the same altsetting...
Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 6 bAlternateSetting 0 bNumEndpoints 3 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0010 1x 16 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bDescriptorSubtype 1 (EP_GENERAL) bmAttributes 0x01 Sampling Frequency bLockDelayUnits 0 Undefined wLockDelay 0 Undefined
Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 6 bAlternateSetting 0 bNumEndpoints 3 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0010 1x 16 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0010 1x 16 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0010 1x 16 bytes bInterval 0 */
.ifnum = 6, .type = QUIRK_MIDI_FIXED_ENDPOINT, .data = & (const struct snd_usb_midi_endpoint_info) { /* I am not certain of the "cables" flags or how * to find out what they are. */ .out_ep = 2, .out_interval = 0x00, .in_ep = 2, .in_interval = 0x00, .out_cables = 0x0001, .in_cables = 0x0001 }
}, { .ifnum = -1 } } } },
participants (1)
-
Damien Zammit