[alsa-devel] Crackly playback, Roland AIRA TR-8 USB audio almost works with ALSA . . .

David W. regulars at d-dub.org.uk
Mon Feb 9 16:02:48 CET 2015


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 at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 



More information about the Alsa-devel mailing list