[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