All of lore.kernel.org
 help / color / mirror / Atom feed
From: "David W." <regulars@d-dub.org.uk>
To: alsa-devel@alsa-project.org
Subject: Crackly playback, Roland AIRA TR-8 USB audio almost works with ALSA . . .
Date: Mon, 26 Jan 2015 23:14:10 +0000	[thread overview]
Message-ID: <54C6CA42.3040206@d-dub.org.uk> (raw)
In-Reply-To: <54A2FF71.9030502@d-dub.org.uk>

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
>>
>>
>>
>> A summary of some USB packets during idle, start playback, stop
>> playback, start recording, stop recording. Playback and record was
>> probably only using a pair of stereo channels IIRC (maybe even one mono
>> channel). I could do the same with all channels if that would be of any use.
>>
>>
>> - at all times, polling seems to be 'Bulk or Interrupt Transfer' to
>> Device Object FFFFFA800BBF1C00h (00000094) with I/O Request Packet
>> FFFFFA800B97B830h
>>
>>
>> - start playback: 'Select Interface', 'Ifc 1 / Alt 1' and 'Ifc 2 / Alt
>> 1', Device Object: FFFFFA800BBF1C00h,  I/O Request Packet: FFFFFA800778E780h
>>
>> 1x 'Create' using I/O Request Packet: FFFFFA800C7A2480h to Device
>> Objects: FFFFFA800C060C20h (00000095) and FFFFFA800BE30600h (00000096)
>>
>>
>> - during playback: lots of 'Isoch Transfer' to FFFFFA800BBF1C00h with
>> nine different I/O Request Packets
>>
>>
>> - stop playback: 'Select Interface', 'Ifc 1 / Alt 0' and 'Ifc 1 / Alt
>> 0', Device Object: FFFFFA800BBF1C00h;   I/O Request Packet:
>> FFFFFA8007552810h
>>
>> 1x 'Close' using I/O Request Packet: FFFFFA800C7A2480h to Device
>> Objects: FFFFFA800C060C20h and FFFFFA800BE30600h; some 'Cleanups' that
>> return 'Invalid Device Request'
>>
>>
>> - start recording: 'Select Interface', 'Ifc 1 / Alt 1' and 'Ifc 2 / Alt
>> 1', Device Object: FFFFFA800BBF1C00h,  I/O Request Packet: FFFFFA800778E780h
>>
>> 5x 'Create' using I/O Request Packet: FFFFFA800C0E9C60h to Device
>> Objects: FFFFFA800C060C20h and FFFFFA800BE30600h
>> 2x 'Create' using I/O Request Packet: FFFFFA800C60A010h to Device
>> Objects: FFFFFA800C060C20h and FFFFFA800BE30600h
>> 1x 'Create' using I/O Request Packet: FFFFFA800754F010h to Device
>> Objects: FFFFFA800C060C20h and FFFFFA800BE30600h
>> 2x 'Close' using I/O Request Packet: FFFFFA800C0E9C60h to Device
>> Objects: FFFFFA800C060C20h and FFFFFA800BE30600h
>>
>>
>> - during recording: lots of 'Isoch Transfer' to FFFFFA800BBF1C00h with
>> nine different I/O Request Packets
>>
>>
>> - stop recording: 'Select Interface', 'Ifc 1 / Alt 0' and 'Ifc 1 / Alt
>> 0', Device Object: FFFFFA800BBF1C00h;   I/O Request Packet:
>> FFFFFA8007552810h
>>
>> 4x 'Close' using I/O Request Packet: FFFFFA8007543C60h to Device
>> Objects: FFFFFA800C060C20h and FFFFFA800BE30600h
>>
>>

       reply	other threads:[~2015-01-26 23:14 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <53B6FB3A.40804@d-dub.org.uk>
     [not found] ` <53B84A0B.9060805@googlemail.com>
     [not found]   ` <53B8563A.40608@d-dub.org.uk>
     [not found]     ` <53B9A821.9060407@googlemail.com>
     [not found]       ` <53B9D21F.30801@d-dub.org.uk>
     [not found]         ` <53BA3EDD.4090105@googlemail.com>
     [not found]           ` <548F70D2.90506@d-dub.org.uk>
     [not found]             ` <54A2FF71.9030502@d-dub.org.uk>
2015-01-26 23:14               ` David W. [this message]
2015-02-09 11:56                 ` Crackly playback, Roland AIRA TR-8 USB audio almost works with ALSA . . David W.
2015-02-09 15:02                   ` David W.
2015-02-10 20:26                     ` David W.

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54C6CA42.3040206@d-dub.org.uk \
    --to=regulars@d-dub.org.uk \
    --cc=alsa-devel@alsa-project.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.