[alsa-devel] Zoom R16
Daniel Mack
daniel at zonque.org
Sun Nov 24 14:03:35 CET 2013
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 at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
More information about the Alsa-devel
mailing list