[alsa-devel] BOSS GT-1 USB audio and implicit feedback

Mike Oliphant oliphant at nostatic.org
Sun Jan 19 00:34:06 CET 2020


I've been digging around in the USB audio section of the kernel for the
past month or so trying unsuccessfully to get audio on my BOSS GT-1
pedalboard to work in Linux.

The device is recognized by the current kernel, but aplay just hangs when
trying to output to it.

My searches led me to this now-resolved issue with implicit feedback quirk
handling on BOSS Katana amplifiers:

https://bugzilla.kernel.org/show_bug.cgi?id=195223

I have patched pcm.c with a similar fix for the GT-1 in
set_sync_ep_implicit_fb_quirk():

        case USB_ID(0x0582, 0x01d6): /* BOSS GT-1 */
                return 0;

This results in successful playback, but with frequent pops/clicks in the
audio - even with high buffer sizes under very low load - likely
attributable to the lack of implicit feedback.

The GT-1 has come up on the mailing list before - some good information is
here, but no resolution:

https://mailman.alsa-project.org/pipermail/alsa-devel/2018-January/130957.html

My understanding from what I think I know about implicit feedback and the
output of lsusb, is that the device is designed to operate with
simultaneous capture/playback, with feedback being provided in the capture
stream to be used to sync both capture and playback.

It seems like this is what the feedback quirk might be trying to do, since
this is what I see from dmesg when trying to play audio with aplay on the
stock kernel:

[  218.530738] usb 1-1.1: setting usb interface 1:1
[  218.530753] Creating new playback data endpoint #d
[  218.530772] Creating new capture data endpoint #8e
[  218.531687] usb 1-1.1: Setting params for ep #d (type 0, 12 urbs), ret=0
[  218.531706] usb 1-1.1: match_endpoint_audioformats: (fmt @ed1fbd45)
score 2
[  218.531840] usb 1-1.1: Setting params for ep #8e (type 0, 12 urbs), ret=0
[  218.531855] usb 1-1.1: Starting data EP @f114d201
[  218.532514] usb 1-1.1: Starting sync EP @984e9cce

I have also tried to manually set the feedback endpoint in
set_sync_ep_implicit_fb_quirk():

        case USB_ID(0x0582, 0x01d6): /* BOSS GT-1 */
                ep = 0x8e;
                ifnum = 2;
                goto add_sync_ep_from_ifnum;

but this results in the same behavior.

Any suggestions on what else to try would be much appreciated. It seems
like the device is *very* close to working properly.

Output from lsusb for the interface follows.

Thanks!

Mike

---
Output from lsusb:

Bus 001 Device 003: ID 0582:01d6 Roland Corp.
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0
  bDeviceProtocol       255
  bMaxPacketSize0        64
  idVendor           0x0582 Roland Corp.
  idProduct          0x01d6
  bcdDevice            0.00
  iManufacturer           1
  iProduct                2
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x00bc
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xc0
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol      0
      iInterface              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      2
      iInterface              0
      ** UNRECOGNIZED:  06 24 f1 01 00 00
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      2
      iInterface              0
      ** UNRECOGNIZED:  07 24 01 01 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      ** UNRECOGNIZED:  06 24 f1 04 16 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x0d  EP 13 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0038  1x 56 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      1
      iInterface              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      1
      iInterface              0
      ** UNRECOGNIZED:  07 24 01 07 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      ** UNRECOGNIZED:  06 24 f1 04 16 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x8e  EP 14 IN
        bmAttributes           37
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Implicit feedback Data
        wMaxPacketSize     0x0038  1x 56 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:  06 24 f1 02 01 01
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       1
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      3
      bInterfaceProtocol      0
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               4


More information about the Alsa-devel mailing list