Message ID | 54C6CA42.3040206@d-dub.org.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
I'm having trouble making a patch (for linux-3.18.5-1-ARCH) to enable implicit feedback mode work for this USB device (Roland TR-8) and would appreciate some advice. I've made semi-educated guesses at various patches, but if an actual developer has any suggestions they would be hugely appreciated!! Adding a quirk for the device (see patch quoted below) to: "set_sync_ep_implicit_fb_quirk()" using endpoint 0x85 (EP 5 IN; Transfer Type: Interrupt, Usage Type: Data; see lsusb -v output below) causes: "BOGUS urb xfer, pipe 0 != type 1" And no sound when playing a sample using 'aplay'. There is sound only if: 'printk(KERN_ERR " XXX %s() :%d\n", __func__, __LINE__);' is added to retire_outbound_urb() and retire_inbound_urb() in sound/usb/endpoint.c. On playback with 'aplay' enough messages are printed to the journal to crash the journald - BUT some samples are played, mostly with bad timing although there are little bursts when I can actually hear the sample. Additionally warnings: underrun!!! (at least 16.449 ms long) underrun!!! (at least 205.035 ms long) Playing the sample again provides no sound and no warnings but pauses for > 20 seconds but the sample is ~2 seconds long. Rebooting the computer allows for sound to be heard again on first play of sample. Rebooting device does not. This seems like the problem is controlling how much data should be sent to the endpoint i.e., the frequency of packets (urbs?) sent from host to device is off but somehow all the printk() activity slows things down enough for the device to actually put something though its DAC? AFAIU, an asynchronous device typically has three isochronous endpoints: - one asynchronous input endpoint for capture samples. - one asynchronous output endpoint for playback samples - one input endpoint for playback frequency feedback data but implicit feedback mode does something slightly different and atypical for the 'playback frequency feedback data'? And that is the problem here? And the "BOGUS urb xfer, pipe 0 != type 1" is indicating we haven't set up an endpoint to correctly: 0 == PIPE_ISOCHRONOUS 1 == PIPE_INTERRUPT 2 == PIPE_CONTROL 3 == PIPE_BULK Endpoint 0x85 is IN to host and Transfer Type: Interrupt, hence 'type 1' in the warning. The implicit feedback quirk is probably setting up a pipe to receive isochronous feedback data from that endpoint hence, 'pipe 0' in the warning. I tried setting the set_sync_ep_implicit_fb_quirk() entry to a different endpoint: 0x8e. This is the audio capture endpoint. M-Audio C400, C600 and Ultras have set_sync_ep_implicit_fb_quirk() entries using their audio capture endpoints as defined in their quirks-table.h entries. When connecting, journal entries: kernel: usb 5-1.1: new high-speed USB device number 5 using ehci-pci kernel: snd-usb-audio: probe of 5-1.1:1.0 failed with error -5 On playback: kernel: usb 5-1.1: cannot submit urb 0, error -2: endpoint not enabled and in terminal: Playing WAVE 'Roland-GR-1-Orchestra-Hit-C5_32_c4_96000.wav' : Signed 32 bit Little Endian, Rate 96000 Hz, Channels 4 aplay: set_params:1297: Unable to install hw params: ACCESS: RW_INTERLEAVED FORMAT: S32_LE SUBFORMAT: STD SAMPLE_BITS: 32 FRAME_BITS: 128 CHANNELS: 4 RATE: 96000 PERIOD_TIME: 125000 PERIOD_SIZE: 12000 PERIOD_BYTES: 192000 PERIODS: 4 BUFFER_TIME: 500000 BUFFER_SIZE: 48000 BUFFER_BYTES: 768000 TICK_TIME: 0 I also tried adding an entry for this device to quirks-table.h. This causes journal entries, when first connected: kernel: usb 1-1.1: 1:1: cannot get freq at ep 0xd kernel: usb 1-1.1: 2:1: cannot get freq at ep 0x8e and on playback: kernel: usb 1-1.1: 1:1: cannot get freq at ep 0xd I've tried this with and without: .clock = 0x80, in the struct snd_usb_audio_quirk for the playback and capture interfaces. I copied that from the M-Audio C400, C600 and Ultra entries which apparently also operate in implicit feedback mode but I'm not sure how to obtain the correct value for this device. Finally, is it possible that search_roland_implicit_fb() isn't being called or needs to do something slightly different for this recent Roland device? I can continue guessing at patches, but if an actual developer has any suggestions they would be hugely appreciated!! David W. On 26/01/15 23:14, David W. wrote: > Dear ALSA developers, > > On 30/12/14 19:39, David W. wrote: >> On 15/12/14 23:37, David W. wrote: >>> On 07/07/14 07:31, Clemens Ladisch wrote: >>>> >>>> Apparently, this device needs some vendor-specific magic to enable >>>> recording. >>>> > > This AIRA TR-8 USB audio device, which fails with an 'input/output > error' after ~10 seconds for 'aplay' and 'arecord', seems to require > operation in implicit feedback mode: the following patch suggested by > Daniel Mack solves the 'input/output' error for 'aplay', but the > playback is noisy and corrupted and the kernel complains of 'rogue URB > xfers' (see below). > > Given this information and the quote below from lsusb etc., I am hoping > someone would be able to suggest a further patch to get playback and > recording working :-) > > I can patch, compile and test recent linux kernels (whatever is in: > https://www.archlinux.org/packages/?sort=&repo=Testing&q=linux) > > > Here's the patch from Daniel which helped: > > > diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c > index 0d8aba5..e35575b 100644 > --- a/sound/usb/pcm.c > +++ b/sound/usb/pcm.c > @@ -346,6 +346,15 @@ static int set_sync_ep_implicit_fb_quirk(struct > snd_usb_substream *subs, > > alts = &iface->altsetting[1]; > goto add_sync_ep; > + case USB_ID(0x0582, 0x017c): > + ep = 0x85; > + iface = usb_ifnum_to_if(dev, 3); > + > + if (!iface || iface->num_altsetting == 0) > + return -EINVAL; > + > + alts = &iface->altsetting[1]; > + goto add_sync_ep; > } > if (attr == USB_ENDPOINT_SYNC_ASYNC && > altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC && > > > > Here's an example of the kind of complaint that the 3.18.2-2-ARCH kernel, with the above patch > applied, reports: > > Jan 12 23:18:20 dwmobile kernel: WARNING: CPU: 2 PID: 1889 at drivers/usb/core/urb.c:450 > usb_submit_urb+0x265/0x5f0 [usbcore]() > Jan 12 23:18:20 dwmobile kernel: usb 2-1.1: BOGUS urb xfer, pipe 0 != type 1 > Jan 12 23:18:20 dwmobile kernel: Modules linked in: snd_usb_audio snd_usbmidi_lib snd_rawmidi > snd_seq_device ctr ccm sha256_ssse3 sha256_generic d > Jan 12 23:18:20 dwmobile kernel: snd_pcm snd_timer video mei_me battery ac snd intel_agp button > intel_gtt acpi_cpufreq shpchp mei soundcore proce > Jan 12 23:18:20 dwmobile kernel: CPU: 2 PID: 1889 Comm: aplay Not tainted 3.18.2-2-custom #1 > Jan 12 23:18:20 dwmobile kernel: Hardware name: System76, Inc. Pangolin > Performance /W76x/M77xCUH > Jan 12 23:18:20 dwmobile kernel: 0000000000000000 000000005911a000 ffff88022988faf8 ffffffff8154f134 > Jan 12 23:18:20 dwmobile kernel: 0000000000000000 ffff88022988fb50 ffff88022988fb38 ffffffff81072bc1 > Jan 12 23:18:20 dwmobile kernel: ffff88022988fb28 ffff88022f1aba00 0000000000000020 0000000000000003 > Jan 12 23:18:20 dwmobile kernel: Call Trace: > Jan 12 23:18:20 dwmobile kernel: [<ffffffff8154f134>] dump_stack+0x4e/0x71 > Jan 12 23:18:20 dwmobile kernel: [<ffffffff81072bc1>] warn_slowpath_common+0x81/0xa0 > Jan 12 23:18:20 dwmobile kernel: [<ffffffff81072c35>] warn_slowpath_fmt+0x55/0x70 > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa009b005>] ? usb_enable_endpoint+0x85/0x90 [usbcore] > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0098e75>] usb_submit_urb+0x265/0x5f0 [usbcore] > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa08d2c65>] snd_usb_endpoint_start+0x125/0x350 > [snd_usb_audio] > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa08dac89>] start_endpoints+0xb9/0x1a0 [snd_usb_audio] > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa08dcbad>] snd_usb_pcm_prepare+0x17d/0x560 [snd_usb_audio] > Jan 12 23:18:20 dwmobile kernel: [<ffffffff810d7af6>] ? current_fs_time+0x16/0x60 > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa028627b>] snd_pcm_do_prepare+0x1b/0x30 [snd_pcm] > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0285e4f>] snd_pcm_action_single+0x2f/0x70 [snd_pcm] > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0285f06>] snd_pcm_action_nonatomic+0x76/0x80 [snd_pcm] > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0288c18>] snd_pcm_common_ioctl1+0x688/0xbc0 [snd_pcm] > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0289268>] snd_pcm_playback_ioctl1+0x118/0x280 [snd_pcm] > Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0289404>] snd_pcm_playback_ioctl+0x34/0x40 [snd_pcm] > Jan 12 23:18:20 dwmobile kernel: [<ffffffff811e23e0>] do_vfs_ioctl+0x2d0/0x4b0 > Jan 12 23:18:20 dwmobile kernel: [<ffffffff811cf2ac>] ? vfs_write+0x18c/0x200 > Jan 12 23:18:20 dwmobile kernel: [<ffffffff811e2641>] SyS_ioctl+0x81/0xa0 > Jan 12 23:18:20 dwmobile kernel: [<ffffffff81554ca9>] system_call_fastpath+0x12/0x17 > Jan 12 23:18:20 dwmobile kernel: ---[ end trace e6531ceb4fd4f2e5 ]--- > Jan 12 23:18:20 dwmobile kernel: ------------[ cut here ]------------ > > >>> >>> amidi -l >>> >>> Dir Device Name >>> IO hw:0,0,0 USB X-Session MIDI 1 >>> I hw:0,0,1 USB X-Session MIDI 2 >>> IO hw:2,0,0 TR-8 MIDI 1 # this device >>> IO hw:2,0,1 TR-8 MIDI 2 # this device >>> >>> >>> ./alsacap -d hw:2,0 >>> >>> *** Exploring configuration space of device 'hw:1,0' for playback *** >>> 4 channels >>> Sampling rate 96000 Hz >>> Sample formats: S32_LE >>> Significant bits: 32 >>> >>> >>> Bus 002 Device 005: ID 0582:017c Roland Corp. >>> 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 0x017c >>> bcdDevice 1.00 >>> iManufacturer 1 Roland >>> iProduct 2 TR-8 >>> iSerial 0 >>> bNumConfigurations 1 >>> Configuration Descriptor: >>> bLength 9 >>> bDescriptorType 2 >>> wTotalLength 176 >>> 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 >>> # <06 24 F1 02 <inputs> <outputs>> from patch comment by Clemens Ladisch >>> ** UNRECOGNIZED: 06 24 f1 01 00 00 >>> # Audio OUT 4 channels? >>> Interface Descriptor: >>> bLength 9 >>> bDescriptorType 4 >>> bInterfaceNumber 1 >>> bAlternateSetting 1 >>> bNumEndpoints 1 >>> bInterfaceClass 255 Vendor Specific Class >>> bInterfaceSubClass 2 >>> bInterfaceProtocol 2 >>> iInterface 0 >>> # seen in other Roland devices >>> # http://ubuntuforums.org/archive/index.php/t-1905531.html >>> ** UNRECOGNIZED: 07 24 01 01 00 01 00 >>> ** UNRECOGNIZED: 0b 24 02 01 04 04 18 01 00 77 01 >>> Endpoint Descriptor: >>> bLength 7 >>> bDescriptorType 5 >>> bEndpointAddress 0x0d EP 13 OUT >>> bmAttributes 5 >>> Transfer Type Isochronous # audio >>> Synch Type Asynchronous >>> Usage Type Data >>> # 4x 24-bit 96kHz == 56 bytes per 4 channels (or 32-bit?) >>> wMaxPacketSize 0x00e0 1x 224 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 >>> # Audio IN: 14 channels? >>> 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 0e 04 18 01 00 77 01 >>> Endpoint Descriptor: >>> bLength 7 >>> bDescriptorType 5 >>> bEndpointAddress 0x8e EP 14 IN >>> bmAttributes 37 >>> Transfer Type Isochronous >>> Synch Type Asynchronous >>> Usage Type Implicit feedback Data >>> # 14 channels x 56 bytes per transfer 96kHz, 24-bit? >>> wMaxPacketSize 0x0310 1x 784 bytes >>> bInterval 1 >>> # MIDI? >>> Interface Descriptor: >>> bLength 9 >>> bDescriptorType 4 >>> bInterfaceNumber 3 >>> bAlternateSetting 0 >>> bNumEndpoints 2 >>> bInterfaceClass 255 Vendor Specific Class >>> bInterfaceSubClass 3 >>> bInterfaceProtocol 0 >>> iInterface 0 >>> # <06 24 F1 02 <inputs> <outputs>> 2 in 2 out >>> ** UNRECOGNIZED: 06 24 f1 02 02 02 >>> 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 >>> # MIDI: same endpoints needs Bulk AND Interrupt packet types? >>> 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 1 >>> 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 1 >>> 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 >>> can't get debug descriptor: Resource temporarily unavailable >>> Device Status: 0x0001 >>> Self Powered >>>
PS, without any of my patches applied: http://www.alsa-project.org/db/?f=c8c6e17e735b0861968c4c397fc754186eb98da7 On 09/02/15 11:56, David W. wrote: > > I'm having trouble making a patch (for linux-3.18.5-1-ARCH) to enable > implicit feedback mode work for this USB device (Roland TR-8) and would > appreciate some advice. > > > I've made semi-educated guesses at various patches, but if an actual > developer has any suggestions they would be hugely appreciated!! > > > Adding a quirk for the device (see patch quoted below) to: > > "set_sync_ep_implicit_fb_quirk()" > > using endpoint 0x85 (EP 5 IN; Transfer Type: Interrupt, Usage Type: Data; > see lsusb -v output below) causes: > > "BOGUS urb xfer, pipe 0 != type 1" > > And no sound when playing a sample using 'aplay'. There is sound only if: > > 'printk(KERN_ERR " XXX %s() :%d\n", __func__, __LINE__);' > > is added to retire_outbound_urb() and retire_inbound_urb() in > sound/usb/endpoint.c. On playback with 'aplay' enough messages are printed > to the journal to crash the journald - BUT some samples are played, mostly > with bad timing although there are little bursts when I can actually hear > the sample. Additionally warnings: > > underrun!!! (at least 16.449 ms long) > underrun!!! (at least 205.035 ms long) > > Playing the sample again provides no sound and no warnings but pauses for > > 20 seconds but the sample is ~2 seconds long. Rebooting the computer allows > for sound to be heard again on first play of sample. Rebooting device does not. > > > This seems like the problem is controlling how much data should > be sent to the endpoint i.e., the frequency of packets (urbs?) sent from > host to device is off but somehow all the printk() activity slows things > down enough for the device to actually put something though its DAC? > > AFAIU, an asynchronous device typically has three isochronous endpoints: > - one asynchronous input endpoint for capture samples. > - one asynchronous output endpoint for playback samples > - one input endpoint for playback frequency feedback data > > but implicit feedback mode does something slightly different and atypical > for the 'playback frequency feedback data'? And that is the problem here? > > And the "BOGUS urb xfer, pipe 0 != type 1" is indicating we haven't set up > an endpoint to correctly: > > 0 == PIPE_ISOCHRONOUS > 1 == PIPE_INTERRUPT > 2 == PIPE_CONTROL > 3 == PIPE_BULK > > Endpoint 0x85 is IN to host and Transfer Type: Interrupt, hence 'type 1' in > the warning. The implicit feedback quirk is probably setting up a pipe to > receive isochronous feedback data from that endpoint hence, 'pipe 0' in the > warning. > > I tried setting the set_sync_ep_implicit_fb_quirk() entry to a different > endpoint: 0x8e. This is the audio capture endpoint. M-Audio C400, C600 and > Ultras have set_sync_ep_implicit_fb_quirk() entries using their audio > capture endpoints as defined in their quirks-table.h entries. > > When connecting, journal entries: > kernel: usb 5-1.1: new high-speed USB device number 5 using ehci-pci > kernel: snd-usb-audio: probe of 5-1.1:1.0 failed with error -5 > > On playback: > kernel: usb 5-1.1: cannot submit urb 0, error -2: endpoint not enabled > > and in terminal: > Playing WAVE 'Roland-GR-1-Orchestra-Hit-C5_32_c4_96000.wav' : Signed 32 bit > Little Endian, Rate 96000 Hz, Channels 4 > aplay: set_params:1297: Unable to install hw params: > ACCESS: RW_INTERLEAVED > FORMAT: S32_LE > SUBFORMAT: STD > SAMPLE_BITS: 32 > FRAME_BITS: 128 > CHANNELS: 4 > RATE: 96000 > PERIOD_TIME: 125000 > PERIOD_SIZE: 12000 > PERIOD_BYTES: 192000 > PERIODS: 4 > BUFFER_TIME: 500000 > BUFFER_SIZE: 48000 > BUFFER_BYTES: 768000 > TICK_TIME: 0 > > > I also tried adding an entry for this device to quirks-table.h. This causes > journal entries, when first connected: > > kernel: usb 1-1.1: 1:1: cannot get freq at ep 0xd > kernel: usb 1-1.1: 2:1: cannot get freq at ep 0x8e > > and on playback: > > kernel: usb 1-1.1: 1:1: cannot get freq at ep 0xd > > I've tried this with and without: > > .clock = 0x80, > > in the struct snd_usb_audio_quirk for the playback and capture interfaces. > I copied that from the M-Audio C400, C600 and Ultra entries which > apparently also operate in implicit feedback mode but I'm not sure how to > obtain the correct value for this device. > > Finally, is it possible that search_roland_implicit_fb() isn't being called > or needs to do something slightly different for this recent Roland device? > > > I can continue guessing at patches, but if an actual developer has any > suggestions they would be hugely appreciated!! > > > David W. > > > On 26/01/15 23:14, David W. wrote: >> Dear ALSA developers, >> >> On 30/12/14 19:39, David W. wrote: >>> On 15/12/14 23:37, David W. wrote: >>>> On 07/07/14 07:31, Clemens Ladisch wrote: >>>>> >>>>> Apparently, this device needs some vendor-specific magic to enable >>>>> recording. >>>>> >> >> This AIRA TR-8 USB audio device, which fails with an 'input/output >> error' after ~10 seconds for 'aplay' and 'arecord', seems to require >> operation in implicit feedback mode: the following patch suggested by >> Daniel Mack solves the 'input/output' error for 'aplay', but the >> playback is noisy and corrupted and the kernel complains of 'rogue URB >> xfers' (see below). >> >> Given this information and the quote below from lsusb etc., I am hoping >> someone would be able to suggest a further patch to get playback and >> recording working :-) >> >> I can patch, compile and test recent linux kernels (whatever is in: >> https://www.archlinux.org/packages/?sort=&repo=Testing&q=linux) >> >> >> Here's the patch from Daniel which helped: >> >> >> diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c >> index 0d8aba5..e35575b 100644 >> --- a/sound/usb/pcm.c >> +++ b/sound/usb/pcm.c >> @@ -346,6 +346,15 @@ static int set_sync_ep_implicit_fb_quirk(struct >> snd_usb_substream *subs, >> >> alts = &iface->altsetting[1]; >> goto add_sync_ep; >> + case USB_ID(0x0582, 0x017c): >> + ep = 0x85; >> + iface = usb_ifnum_to_if(dev, 3); >> + >> + if (!iface || iface->num_altsetting == 0) >> + return -EINVAL; >> + >> + alts = &iface->altsetting[1]; >> + goto add_sync_ep; >> } >> if (attr == USB_ENDPOINT_SYNC_ASYNC && >> altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC && >> >> >> >> Here's an example of the kind of complaint that the 3.18.2-2-ARCH kernel, with the above patch >> applied, reports: >> >> Jan 12 23:18:20 dwmobile kernel: WARNING: CPU: 2 PID: 1889 at drivers/usb/core/urb.c:450 >> usb_submit_urb+0x265/0x5f0 [usbcore]() >> Jan 12 23:18:20 dwmobile kernel: usb 2-1.1: BOGUS urb xfer, pipe 0 != type 1 >> Jan 12 23:18:20 dwmobile kernel: Modules linked in: snd_usb_audio snd_usbmidi_lib snd_rawmidi >> snd_seq_device ctr ccm sha256_ssse3 sha256_generic d >> Jan 12 23:18:20 dwmobile kernel: snd_pcm snd_timer video mei_me battery ac snd intel_agp button >> intel_gtt acpi_cpufreq shpchp mei soundcore proce >> Jan 12 23:18:20 dwmobile kernel: CPU: 2 PID: 1889 Comm: aplay Not tainted 3.18.2-2-custom #1 >> Jan 12 23:18:20 dwmobile kernel: Hardware name: System76, Inc. Pangolin >> Performance /W76x/M77xCUH >> Jan 12 23:18:20 dwmobile kernel: 0000000000000000 000000005911a000 ffff88022988faf8 ffffffff8154f134 >> Jan 12 23:18:20 dwmobile kernel: 0000000000000000 ffff88022988fb50 ffff88022988fb38 ffffffff81072bc1 >> Jan 12 23:18:20 dwmobile kernel: ffff88022988fb28 ffff88022f1aba00 0000000000000020 0000000000000003 >> Jan 12 23:18:20 dwmobile kernel: Call Trace: >> Jan 12 23:18:20 dwmobile kernel: [<ffffffff8154f134>] dump_stack+0x4e/0x71 >> Jan 12 23:18:20 dwmobile kernel: [<ffffffff81072bc1>] warn_slowpath_common+0x81/0xa0 >> Jan 12 23:18:20 dwmobile kernel: [<ffffffff81072c35>] warn_slowpath_fmt+0x55/0x70 >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa009b005>] ? usb_enable_endpoint+0x85/0x90 [usbcore] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0098e75>] usb_submit_urb+0x265/0x5f0 [usbcore] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa08d2c65>] snd_usb_endpoint_start+0x125/0x350 >> [snd_usb_audio] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa08dac89>] start_endpoints+0xb9/0x1a0 [snd_usb_audio] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa08dcbad>] snd_usb_pcm_prepare+0x17d/0x560 [snd_usb_audio] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffff810d7af6>] ? current_fs_time+0x16/0x60 >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa028627b>] snd_pcm_do_prepare+0x1b/0x30 [snd_pcm] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0285e4f>] snd_pcm_action_single+0x2f/0x70 [snd_pcm] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0285f06>] snd_pcm_action_nonatomic+0x76/0x80 [snd_pcm] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0288c18>] snd_pcm_common_ioctl1+0x688/0xbc0 [snd_pcm] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0289268>] snd_pcm_playback_ioctl1+0x118/0x280 [snd_pcm] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0289404>] snd_pcm_playback_ioctl+0x34/0x40 [snd_pcm] >> Jan 12 23:18:20 dwmobile kernel: [<ffffffff811e23e0>] do_vfs_ioctl+0x2d0/0x4b0 >> Jan 12 23:18:20 dwmobile kernel: [<ffffffff811cf2ac>] ? vfs_write+0x18c/0x200 >> Jan 12 23:18:20 dwmobile kernel: [<ffffffff811e2641>] SyS_ioctl+0x81/0xa0 >> Jan 12 23:18:20 dwmobile kernel: [<ffffffff81554ca9>] system_call_fastpath+0x12/0x17 >> Jan 12 23:18:20 dwmobile kernel: ---[ end trace e6531ceb4fd4f2e5 ]--- >> Jan 12 23:18:20 dwmobile kernel: ------------[ cut here ]------------ >> >> >>>> >>>> amidi -l >>>> >>>> Dir Device Name >>>> IO hw:0,0,0 USB X-Session MIDI 1 >>>> I hw:0,0,1 USB X-Session MIDI 2 >>>> IO hw:2,0,0 TR-8 MIDI 1 # this device >>>> IO hw:2,0,1 TR-8 MIDI 2 # this device >>>> >>>> >>>> ./alsacap -d hw:2,0 >>>> >>>> *** Exploring configuration space of device 'hw:1,0' for playback *** >>>> 4 channels >>>> Sampling rate 96000 Hz >>>> Sample formats: S32_LE >>>> Significant bits: 32 >>>> >>>> >>>> Bus 002 Device 005: ID 0582:017c Roland Corp. >>>> 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 0x017c >>>> bcdDevice 1.00 >>>> iManufacturer 1 Roland >>>> iProduct 2 TR-8 >>>> iSerial 0 >>>> bNumConfigurations 1 >>>> Configuration Descriptor: >>>> bLength 9 >>>> bDescriptorType 2 >>>> wTotalLength 176 >>>> 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 >>>> # <06 24 F1 02 <inputs> <outputs>> from patch comment by Clemens Ladisch >>>> ** UNRECOGNIZED: 06 24 f1 01 00 00 >>>> # Audio OUT 4 channels? >>>> Interface Descriptor: >>>> bLength 9 >>>> bDescriptorType 4 >>>> bInterfaceNumber 1 >>>> bAlternateSetting 1 >>>> bNumEndpoints 1 >>>> bInterfaceClass 255 Vendor Specific Class >>>> bInterfaceSubClass 2 >>>> bInterfaceProtocol 2 >>>> iInterface 0 >>>> # seen in other Roland devices >>>> # http://ubuntuforums.org/archive/index.php/t-1905531.html >>>> ** UNRECOGNIZED: 07 24 01 01 00 01 00 >>>> ** UNRECOGNIZED: 0b 24 02 01 04 04 18 01 00 77 01 >>>> Endpoint Descriptor: >>>> bLength 7 >>>> bDescriptorType 5 >>>> bEndpointAddress 0x0d EP 13 OUT >>>> bmAttributes 5 >>>> Transfer Type Isochronous # audio >>>> Synch Type Asynchronous >>>> Usage Type Data >>>> # 4x 24-bit 96kHz == 56 bytes per 4 channels (or 32-bit?) >>>> wMaxPacketSize 0x00e0 1x 224 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 >>>> # Audio IN: 14 channels? >>>> 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 0e 04 18 01 00 77 01 >>>> Endpoint Descriptor: >>>> bLength 7 >>>> bDescriptorType 5 >>>> bEndpointAddress 0x8e EP 14 IN >>>> bmAttributes 37 >>>> Transfer Type Isochronous >>>> Synch Type Asynchronous >>>> Usage Type Implicit feedback Data >>>> # 14 channels x 56 bytes per transfer 96kHz, 24-bit? >>>> wMaxPacketSize 0x0310 1x 784 bytes >>>> bInterval 1 >>>> # MIDI? >>>> Interface Descriptor: >>>> bLength 9 >>>> bDescriptorType 4 >>>> bInterfaceNumber 3 >>>> bAlternateSetting 0 >>>> bNumEndpoints 2 >>>> bInterfaceClass 255 Vendor Specific Class >>>> bInterfaceSubClass 3 >>>> bInterfaceProtocol 0 >>>> iInterface 0 >>>> # <06 24 F1 02 <inputs> <outputs>> 2 in 2 out >>>> ** UNRECOGNIZED: 06 24 f1 02 02 02 >>>> 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 >>>> # MIDI: same endpoints needs Bulk AND Interrupt packet types? >>>> 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 1 >>>> 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 1 >>>> 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 >>>> can't get debug descriptor: Resource temporarily unavailable >>>> Device Status: 0x0001 >>>> Self Powered >>>> > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel >
Is "implicit feedback" specific to USB audio playback endpoints? If yes, and if the implementation of "implicit feedback" is more problematic in this 'Roland TR-8' than it is in the 'M-Audio C400/C600/Ultras' for ALSA development (the latter apparently have quirks working for them), is the following possible: to write a quirk for this TR-8 which will expose only the (non-implicit feedback) audio capture USB endpoints and MIDI in+out endpoints but block/mask the (problematic implicit feedback) audio playback USB endpoints? This isn't ideal but would open up a lot of usability for this popular drum machine in linux. Audio output could be routed to a separate device via jack2's audioadapter or alsa_in and alsa_out etc. cheers. On 09/02/15 15:02, David W. wrote: > > PS, without any of my patches applied: > > http://www.alsa-project.org/db/?f=c8c6e17e735b0861968c4c397fc754186eb98da7 > > On 09/02/15 11:56, David W. wrote: >> >> I'm having trouble making a patch (for linux-3.18.5-1-ARCH) to enable >> implicit feedback mode work for this USB device (Roland TR-8) and would >> appreciate some advice. >> >> >> I've made semi-educated guesses at various patches, but if an actual >> developer has any suggestions they would be hugely appreciated!! >> >> >> Adding a quirk for the device (see patch quoted below) to: >> >> "set_sync_ep_implicit_fb_quirk()" >> >> using endpoint 0x85 (EP 5 IN; Transfer Type: Interrupt, Usage Type: Data; >> see lsusb -v output below) causes: >> >> "BOGUS urb xfer, pipe 0 != type 1" >> >> And no sound when playing a sample using 'aplay'. There is sound only if: >> >> 'printk(KERN_ERR " XXX %s() :%d\n", __func__, __LINE__);' >> >> is added to retire_outbound_urb() and retire_inbound_urb() in >> sound/usb/endpoint.c. On playback with 'aplay' enough messages are printed >> to the journal to crash the journald - BUT some samples are played, mostly >> with bad timing although there are little bursts when I can actually hear >> the sample. Additionally warnings: >> >> underrun!!! (at least 16.449 ms long) >> underrun!!! (at least 205.035 ms long) >> >> Playing the sample again provides no sound and no warnings but pauses for > >> 20 seconds but the sample is ~2 seconds long. Rebooting the computer allows >> for sound to be heard again on first play of sample. Rebooting device does not. >> >> >> This seems like the problem is controlling how much data should >> be sent to the endpoint i.e., the frequency of packets (urbs?) sent from >> host to device is off but somehow all the printk() activity slows things >> down enough for the device to actually put something though its DAC? >> >> AFAIU, an asynchronous device typically has three isochronous endpoints: >> - one asynchronous input endpoint for capture samples. >> - one asynchronous output endpoint for playback samples >> - one input endpoint for playback frequency feedback data >> >> but implicit feedback mode does something slightly different and atypical >> for the 'playback frequency feedback data'? And that is the problem here? >> >> And the "BOGUS urb xfer, pipe 0 != type 1" is indicating we haven't set up >> an endpoint to correctly: >> >> 0 == PIPE_ISOCHRONOUS >> 1 == PIPE_INTERRUPT >> 2 == PIPE_CONTROL >> 3 == PIPE_BULK >> >> Endpoint 0x85 is IN to host and Transfer Type: Interrupt, hence 'type 1' in >> the warning. The implicit feedback quirk is probably setting up a pipe to >> receive isochronous feedback data from that endpoint hence, 'pipe 0' in the >> warning. >> >> I tried setting the set_sync_ep_implicit_fb_quirk() entry to a different >> endpoint: 0x8e. This is the audio capture endpoint. M-Audio C400, C600 and >> Ultras have set_sync_ep_implicit_fb_quirk() entries using their audio >> capture endpoints as defined in their quirks-table.h entries. >> >> When connecting, journal entries: >> kernel: usb 5-1.1: new high-speed USB device number 5 using ehci-pci >> kernel: snd-usb-audio: probe of 5-1.1:1.0 failed with error -5 >> >> On playback: >> kernel: usb 5-1.1: cannot submit urb 0, error -2: endpoint not enabled >> >> and in terminal: >> Playing WAVE 'Roland-GR-1-Orchestra-Hit-C5_32_c4_96000.wav' : Signed 32 bit >> Little Endian, Rate 96000 Hz, Channels 4 >> aplay: set_params:1297: Unable to install hw params: >> ACCESS: RW_INTERLEAVED >> FORMAT: S32_LE >> SUBFORMAT: STD >> SAMPLE_BITS: 32 >> FRAME_BITS: 128 >> CHANNELS: 4 >> RATE: 96000 >> PERIOD_TIME: 125000 >> PERIOD_SIZE: 12000 >> PERIOD_BYTES: 192000 >> PERIODS: 4 >> BUFFER_TIME: 500000 >> BUFFER_SIZE: 48000 >> BUFFER_BYTES: 768000 >> TICK_TIME: 0 >> >> >> I also tried adding an entry for this device to quirks-table.h. This causes >> journal entries, when first connected: >> >> kernel: usb 1-1.1: 1:1: cannot get freq at ep 0xd >> kernel: usb 1-1.1: 2:1: cannot get freq at ep 0x8e >> >> and on playback: >> >> kernel: usb 1-1.1: 1:1: cannot get freq at ep 0xd >> >> I've tried this with and without: >> >> .clock = 0x80, >> >> in the struct snd_usb_audio_quirk for the playback and capture interfaces. >> I copied that from the M-Audio C400, C600 and Ultra entries which >> apparently also operate in implicit feedback mode but I'm not sure how to >> obtain the correct value for this device. >> >> Finally, is it possible that search_roland_implicit_fb() isn't being called >> or needs to do something slightly different for this recent Roland device? >> >> >> I can continue guessing at patches, but if an actual developer has any >> suggestions they would be hugely appreciated!! >> >> >> David W. >> >> >> On 26/01/15 23:14, David W. wrote: >>> Dear ALSA developers, >>> >>> On 30/12/14 19:39, David W. wrote: >>>> On 15/12/14 23:37, David W. wrote: >>>>> On 07/07/14 07:31, Clemens Ladisch wrote: >>>>>> >>>>>> Apparently, this device needs some vendor-specific magic to enable >>>>>> recording. >>>>>> >>> >>> This AIRA TR-8 USB audio device, which fails with an 'input/output >>> error' after ~10 seconds for 'aplay' and 'arecord', seems to require >>> operation in implicit feedback mode: the following patch suggested by >>> Daniel Mack solves the 'input/output' error for 'aplay', but the >>> playback is noisy and corrupted and the kernel complains of 'rogue URB >>> xfers' (see below). >>> >>> Given this information and the quote below from lsusb etc., I am hoping >>> someone would be able to suggest a further patch to get playback and >>> recording working :-) >>> >>> I can patch, compile and test recent linux kernels (whatever is in: >>> https://www.archlinux.org/packages/?sort=&repo=Testing&q=linux) >>> >>> >>> Here's the patch from Daniel which helped: >>> >>> >>> diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c >>> index 0d8aba5..e35575b 100644 >>> --- a/sound/usb/pcm.c >>> +++ b/sound/usb/pcm.c >>> @@ -346,6 +346,15 @@ static int set_sync_ep_implicit_fb_quirk(struct >>> snd_usb_substream *subs, >>> >>> alts = &iface->altsetting[1]; >>> goto add_sync_ep; >>> + case USB_ID(0x0582, 0x017c): >>> + ep = 0x85; >>> + iface = usb_ifnum_to_if(dev, 3); >>> + >>> + if (!iface || iface->num_altsetting == 0) >>> + return -EINVAL; >>> + >>> + alts = &iface->altsetting[1]; >>> + goto add_sync_ep; >>> } >>> if (attr == USB_ENDPOINT_SYNC_ASYNC && >>> altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC && >>> >>> >>> >>> Here's an example of the kind of complaint that the 3.18.2-2-ARCH kernel, with the above patch >>> applied, reports: >>> >>> Jan 12 23:18:20 dwmobile kernel: WARNING: CPU: 2 PID: 1889 at drivers/usb/core/urb.c:450 >>> usb_submit_urb+0x265/0x5f0 [usbcore]() >>> Jan 12 23:18:20 dwmobile kernel: usb 2-1.1: BOGUS urb xfer, pipe 0 != type 1 >>> Jan 12 23:18:20 dwmobile kernel: Modules linked in: snd_usb_audio snd_usbmidi_lib snd_rawmidi >>> snd_seq_device ctr ccm sha256_ssse3 sha256_generic d >>> Jan 12 23:18:20 dwmobile kernel: snd_pcm snd_timer video mei_me battery ac snd intel_agp button >>> intel_gtt acpi_cpufreq shpchp mei soundcore proce >>> Jan 12 23:18:20 dwmobile kernel: CPU: 2 PID: 1889 Comm: aplay Not tainted 3.18.2-2-custom #1 >>> Jan 12 23:18:20 dwmobile kernel: Hardware name: System76, Inc. Pangolin >>> Performance /W76x/M77xCUH >>> Jan 12 23:18:20 dwmobile kernel: 0000000000000000 000000005911a000 ffff88022988faf8 ffffffff8154f134 >>> Jan 12 23:18:20 dwmobile kernel: 0000000000000000 ffff88022988fb50 ffff88022988fb38 ffffffff81072bc1 >>> Jan 12 23:18:20 dwmobile kernel: ffff88022988fb28 ffff88022f1aba00 0000000000000020 0000000000000003 >>> Jan 12 23:18:20 dwmobile kernel: Call Trace: >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffff8154f134>] dump_stack+0x4e/0x71 >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffff81072bc1>] warn_slowpath_common+0x81/0xa0 >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffff81072c35>] warn_slowpath_fmt+0x55/0x70 >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa009b005>] ? usb_enable_endpoint+0x85/0x90 [usbcore] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0098e75>] usb_submit_urb+0x265/0x5f0 [usbcore] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa08d2c65>] snd_usb_endpoint_start+0x125/0x350 >>> [snd_usb_audio] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa08dac89>] start_endpoints+0xb9/0x1a0 [snd_usb_audio] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa08dcbad>] snd_usb_pcm_prepare+0x17d/0x560 [snd_usb_audio] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffff810d7af6>] ? current_fs_time+0x16/0x60 >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa028627b>] snd_pcm_do_prepare+0x1b/0x30 [snd_pcm] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0285e4f>] snd_pcm_action_single+0x2f/0x70 [snd_pcm] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0285f06>] snd_pcm_action_nonatomic+0x76/0x80 [snd_pcm] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0288c18>] snd_pcm_common_ioctl1+0x688/0xbc0 [snd_pcm] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0289268>] snd_pcm_playback_ioctl1+0x118/0x280 [snd_pcm] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffffa0289404>] snd_pcm_playback_ioctl+0x34/0x40 [snd_pcm] >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffff811e23e0>] do_vfs_ioctl+0x2d0/0x4b0 >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffff811cf2ac>] ? vfs_write+0x18c/0x200 >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffff811e2641>] SyS_ioctl+0x81/0xa0 >>> Jan 12 23:18:20 dwmobile kernel: [<ffffffff81554ca9>] system_call_fastpath+0x12/0x17 >>> Jan 12 23:18:20 dwmobile kernel: ---[ end trace e6531ceb4fd4f2e5 ]--- >>> Jan 12 23:18:20 dwmobile kernel: ------------[ cut here ]------------ >>> >>> >>>>> >>>>> amidi -l >>>>> >>>>> Dir Device Name >>>>> IO hw:0,0,0 USB X-Session MIDI 1 >>>>> I hw:0,0,1 USB X-Session MIDI 2 >>>>> IO hw:2,0,0 TR-8 MIDI 1 # this device >>>>> IO hw:2,0,1 TR-8 MIDI 2 # this device >>>>> >>>>> >>>>> ./alsacap -d hw:2,0 >>>>> >>>>> *** Exploring configuration space of device 'hw:1,0' for playback *** >>>>> 4 channels >>>>> Sampling rate 96000 Hz >>>>> Sample formats: S32_LE >>>>> Significant bits: 32 >>>>> >>>>> >>>>> Bus 002 Device 005: ID 0582:017c Roland Corp. >>>>> 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 0x017c >>>>> bcdDevice 1.00 >>>>> iManufacturer 1 Roland >>>>> iProduct 2 TR-8 >>>>> iSerial 0 >>>>> bNumConfigurations 1 >>>>> Configuration Descriptor: >>>>> bLength 9 >>>>> bDescriptorType 2 >>>>> wTotalLength 176 >>>>> 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 >>>>> # <06 24 F1 02 <inputs> <outputs>> from patch comment by Clemens Ladisch >>>>> ** UNRECOGNIZED: 06 24 f1 01 00 00 >>>>> # Audio OUT 4 channels? >>>>> Interface Descriptor: >>>>> bLength 9 >>>>> bDescriptorType 4 >>>>> bInterfaceNumber 1 >>>>> bAlternateSetting 1 >>>>> bNumEndpoints 1 >>>>> bInterfaceClass 255 Vendor Specific Class >>>>> bInterfaceSubClass 2 >>>>> bInterfaceProtocol 2 >>>>> iInterface 0 >>>>> # seen in other Roland devices >>>>> # http://ubuntuforums.org/archive/index.php/t-1905531.html >>>>> ** UNRECOGNIZED: 07 24 01 01 00 01 00 >>>>> ** UNRECOGNIZED: 0b 24 02 01 04 04 18 01 00 77 01 >>>>> Endpoint Descriptor: >>>>> bLength 7 >>>>> bDescriptorType 5 >>>>> bEndpointAddress 0x0d EP 13 OUT >>>>> bmAttributes 5 >>>>> Transfer Type Isochronous # audio >>>>> Synch Type Asynchronous >>>>> Usage Type Data >>>>> # 4x 24-bit 96kHz == 56 bytes per 4 channels (or 32-bit?) >>>>> wMaxPacketSize 0x00e0 1x 224 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 >>>>> # Audio IN: 14 channels? >>>>> 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 0e 04 18 01 00 77 01 >>>>> Endpoint Descriptor: >>>>> bLength 7 >>>>> bDescriptorType 5 >>>>> bEndpointAddress 0x8e EP 14 IN >>>>> bmAttributes 37 >>>>> Transfer Type Isochronous >>>>> Synch Type Asynchronous >>>>> Usage Type Implicit feedback Data >>>>> # 14 channels x 56 bytes per transfer 96kHz, 24-bit? >>>>> wMaxPacketSize 0x0310 1x 784 bytes >>>>> bInterval 1 >>>>> # MIDI? >>>>> Interface Descriptor: >>>>> bLength 9 >>>>> bDescriptorType 4 >>>>> bInterfaceNumber 3 >>>>> bAlternateSetting 0 >>>>> bNumEndpoints 2 >>>>> bInterfaceClass 255 Vendor Specific Class >>>>> bInterfaceSubClass 3 >>>>> bInterfaceProtocol 0 >>>>> iInterface 0 >>>>> # <06 24 F1 02 <inputs> <outputs>> 2 in 2 out >>>>> ** UNRECOGNIZED: 06 24 f1 02 02 02 >>>>> 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 >>>>> # MIDI: same endpoints needs Bulk AND Interrupt packet types? >>>>> 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 1 >>>>> 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 1 >>>>> 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 >>>>> can't get debug descriptor: Resource temporarily unavailable >>>>> Device Status: 0x0001 >>>>> Self Powered >>>>> >> >> _______________________________________________ >> Alsa-devel mailing list >> Alsa-devel@alsa-project.org >> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel >> > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel >
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index 0d8aba5..e35575b 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -346,6 +346,15 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs, alts = &iface->altsetting[1]; goto add_sync_ep; + case USB_ID(0x0582, 0x017c): + ep = 0x85; + iface = usb_ifnum_to_if(dev, 3); + + if (!iface || iface->num_altsetting == 0) + return -EINVAL; + + alts = &iface->altsetting[1]; + goto add_sync_ep; } if (attr == USB_ENDPOINT_SYNC_ASYNC &&