Hello, I am looking for some assistance in getting the Zoom R16 working for playback. Please let me know if this is the right forum for this...
The device is recognized, but I just can't figure out which interface is which, and how to configure them in quirks-table.h. Any help would be appreciated.
To start, the output of lsusb -v for the device is this: ---
Bus 001 Device 010: ID 1686:00dd ZOOM Corporation Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 255 bMaxPacketSize0 64 idVendor 0x1686 ZOOM Corporation idProduct 0x00dd bcdDevice 0.02 iManufacturer 1 iProduct 2 R16 iSerial 3 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 259 bNumInterfaces 4 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 480mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 0b 24 01 00 01 35 00 03 01 02 03 ** UNRECOGNIZED: 0c 24 02 05 01 01 00 02 03 00 00 00 ** UNRECOGNIZED: 09 24 03 08 01 03 00 05 00 ** UNRECOGNIZED: 0c 24 02 09 01 02 00 08 00 00 00 00 ** UNRECOGNIZED: 09 24 03 0c 01 01 00 09 00 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 07 24 01 05 01 01 00 ** UNRECOGNIZED: 14 24 02 01 02 04 18 04 44 ac 00 80 bb 00 88 58 01 00 77 01 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 9 Transfer Type Isochronous Synch Type Adaptive Usage Type Data wMaxPacketSize 0x006c 1x 108 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 07 24 01 0c 01 01 00 ** UNRECOGNIZED: 14 24 02 01 08 04 18 04 44 ac 00 80 bb 00 88 58 01 00 77 01 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 13 Transfer Type Isochronous Synch Type Synchronous Usage Type Data wMaxPacketSize 0x01a0 1x 416 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 3 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 3 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 07 24 01 00 01 41 00 ** UNRECOGNIZED: 06 24 02 01 01 00 ** UNRECOGNIZED: 06 24 02 02 02 00 ** UNRECOGNIZED: 09 24 03 01 03 01 02 01 00 ** UNRECOGNIZED: 09 24 03 02 04 01 01 01 00 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 255 bMaxPacketSize0 64 bNumConfigurations 1 Device Status: 0x0001 Self Powered
---
This is the quirk that Clemens provided on the linux-audio mail list...the device is recognized, but no capture/playback:
{ /* ZOOM R16 in USB 2.0 mode */ USB_DEVICE(0x1686, 0x00dd), .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_IGNORE_INTERFACE }, { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 2, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 3, .type = QUIRK_MIDI_STANDARD_INTERFACE }, { .ifnum = .1 }, } } },
Now....despite there being no #4 interface in lsusb, if I append the following to the above quirk I get all 8 channels of capture working. I am more confused than ever. :)
{ .ifnum = 4, .type = QUIRK_AUDIO_FIXED_ENDPOINT, .data = & (const struct audioformat) { .formats = SNDRV_PCM_FMTBIT_S24_LE, .channels = 8, .iface = 1, .altsetting = 1, .altset_idx = 1, .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, .endpoint = 0x84, .ep_attr = 13, .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, .rate_min = 44100, .rate_max = 96000, .nr_rates = 4, .rate_table = (unsigned int[]) { 44100, 48000, 88200, 96000 } } },
Obviously, this is not the correct solution and I can't make playback work by adding additional .ifnums. I am quite certain that interface 1 is capture and 2 is playback but if I add the same info to either of those sections my entire system freezes when I plug in the device.
Thanks, jason
Well, I solved part of my own problem -- by removing the .endpoint and .ep_addr settings from the quirk it now works for capture under .ifnum=1. In fact, I now see the interface in JACK listed as hw:R16(#1) which it never had done before.
MIDI is also working properly on .ifnum=3
So, I am now certain that interface 2 is playback... however, playback does not work with the following:
{ .ifnum = 2, .type = QUIRK_AUDIO_FIXED_ENDPOINT, .data = & (const struct audioformat) { .formats = SNDRV_PCM_FMTBIT_S24_LE, .channels = 2, .iface = 1, .altsetting = 1, .altset_idx = 1, .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, .rate_min = 44100, .rate_max = 96000, .nr_rates = 4, .rate_table = (unsigned int[]) { 44100, 48000, 88200, 96000 } } },
This totally freezes the computer... I am certain that the device is 24 bit, supports all four sample rates, and is capable of full duplex operation. Any suggestions for this playback section?
Thanks, Jason
On Fri, Nov 22, 2013 at 01:12:17PM -0500, Jason Mancine wrote:
Hello, I am looking for some assistance in getting the Zoom R16 working for playback. Please let me know if this is the right forum for this...
The device is recognized, but I just can't figure out which interface is which, and how to configure them in quirks-table.h. Any help would be appreciated.
Please try with a recent kernel and see if something like this in quirks-table.h helps you:
{ .match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_CLASS, .idVendor = 0x1686, .bInterfaceClass = USB_CLASS_VENDOR_SPEC, .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_AUTODETECT } },
Daniel
To start, the output of lsusb -v for the device is this:
Bus 001 Device 010: ID 1686:00dd ZOOM Corporation Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 255 bMaxPacketSize0 64 idVendor 0x1686 ZOOM Corporation idProduct 0x00dd bcdDevice 0.02 iManufacturer 1 iProduct 2 R16 iSerial 3 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 259 bNumInterfaces 4 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 480mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 0b 24 01 00 01 35 00 03 01 02 03 ** UNRECOGNIZED: 0c 24 02 05 01 01 00 02 03 00 00 00 ** UNRECOGNIZED: 09 24 03 08 01 03 00 05 00 ** UNRECOGNIZED: 0c 24 02 09 01 02 00 08 00 00 00 00 ** UNRECOGNIZED: 09 24 03 0c 01 01 00 09 00 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 07 24 01 05 01 01 00 ** UNRECOGNIZED: 14 24 02 01 02 04 18 04 44 ac 00 80 bb 00 88 58 01 00 77 01 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 9 Transfer Type Isochronous Synch Type Adaptive Usage Type Data wMaxPacketSize 0x006c 1x 108 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 2 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 07 24 01 0c 01 01 00 ** UNRECOGNIZED: 14 24 02 01 08 04 18 04 44 ac 00 80 bb 00 88 58 01 00 77 01 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 13 Transfer Type Isochronous Synch Type Synchronous Usage Type Data wMaxPacketSize 0x01a0 1x 416 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 3 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 3 bInterfaceProtocol 0 iInterface 0 ** UNRECOGNIZED: 07 24 01 00 01 41 00 ** UNRECOGNIZED: 06 24 02 01 01 00 ** UNRECOGNIZED: 06 24 02 02 02 00 ** UNRECOGNIZED: 09 24 03 01 03 01 02 01 00 ** UNRECOGNIZED: 09 24 03 02 04 01 01 01 00 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 255 bMaxPacketSize0 64 bNumConfigurations 1 Device Status: 0x0001 Self Powered
This is the quirk that Clemens provided on the linux-audio mail list...the device is recognized, but no capture/playback:
{ /* ZOOM R16 in USB 2.0 mode */ USB_DEVICE(0x1686, 0x00dd), .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_IGNORE_INTERFACE }, { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 2, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 3, .type = QUIRK_MIDI_STANDARD_INTERFACE }, { .ifnum = .1 }, } } },
Now....despite there being no #4 interface in lsusb, if I append the following to the above quirk I get all 8 channels of capture working. I am more confused than ever. :)
{ .ifnum = 4, .type = QUIRK_AUDIO_FIXED_ENDPOINT, .data = & (const struct audioformat) { .formats = SNDRV_PCM_FMTBIT_S24_LE, .channels = 8, .iface = 1, .altsetting = 1, .altset_idx = 1, .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, .endpoint = 0x84, .ep_attr = 13, .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, .rate_min = 44100, .rate_max = 96000, .nr_rates = 4, .rate_table = (unsigned int[]) { 44100, 48000, 88200, 96000 } } },
Obviously, this is not the correct solution and I can't make playback work by adding additional .ifnums. I am quite certain that interface 1 is capture and 2 is playback but if I add the same info to either of those sections my entire system freezes when I plug in the device.
Thanks, jason _______________________________________________ Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
participants (2)
-
Daniel Mack
-
Jason Mancine