[alsa-devel] BOSS GT-1 USB audio and implicit feedback
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.ht...
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
Hi man
I feel i#am in the same boat as you with the helix.
Just its other way round: it works generally wih rare sync glizches depending on buffer.
Or if i force an implicit feedback endpoint it fails, but the created endpoints re correct.
Example:
[ 6449.240683] usb 9-1.3: setting usb interface 3:1 [ 6449.240685] usb 9-1.3: Creating new capture data endpoint #83 [ 6449.240811] usb 9-1.3: Setting params for ep #83 (type 0, 12 urbs), ret=0 [ 6449.241262] usb 9-1.3: setting usb interface 2:1 [ 6449.241263] usb 9-1.3: Creating new playback data endpoint #3 [ 6449.241480] usb 9-1.3: Setting params for ep #3 (type 0, 3 urbs), ret=0 [ 6449.241481] usb 9-1.3: Starting data EP @000000003cb8615a [ 6449.241980] usb 9-1.3: Starting data EP @000000001cd170f7
works, but glitches every 20 minutes with a 256 buffer and 3 periods aka there is NO sync active.
.. while
[ 6063.161280] usb 9-1.3: Setting params for ep #83 (type 0, 12 urbs), ret=0 [ 6063.161734] usb 9-1.3: setting usb interface 2:1 [ 6063.161735] usb 9-1.3: Creating new playback data endpoint #3 [ 6063.161737] usb 9-1.3: Re-using EP 83 in iface 3,1 @000000008c3855fb [ 6063.162033] usb 9-1.3: Setting params for ep #3 (type 0, 12 urbs), ret=0 [ 6063.162035] usb 9-1.3: match_endpoint_audioformats: (fmt @000000006290dadc) score 2 [ 6063.162040] usb 9-1.3: Setting params for ep #83 (type 0, 12 urbs), ret=0 [ 6063.162040] usb 9-1.3: Starting data EP @000000001d36b573 [ 6063.162466] usb 9-1.3: Starting sync EP @000000008c3855fb [ 6063.162977] usb 9-1.3: Starting data EP @000000008c3855fb
is with a forced sync endpoint, but it will not finally setup.
Its the same as with your device that implicit feedback with "shared" endpoints for in data seems to be a problem.
Unfortunately i alsked around here since 2 years but never got a result.
Sidenote: i have the chance to compare to the nac side if this helps ( helix works driverless with initial 48kHz there too )
Perhaps more heads some day gets their brains wrapped around this.
Cheers ... Jens
participants (2)
-
Jens Verwiebe
-
Mike Oliphant