[alsa-devel] XMOS USB Audio Class 2.0 Reference Design
Hello all,
I'm starting a product development using the XMOS USB Audio Class 2.0 Ref Design (http://www.xmos.com/technology/prototype-boards/usbaudio2) and I'd like to get some help in understanding what support there is, or will be, for Audio Class 2.0 devices within Linux.
First of all some disclaimers. I'm new to the Linux kernel and programming in general having come from a hardware background. I will do my best not to spam the mailing list but please don't assume something is too simple to explain to me. I'm going to use this experience as a learning exercise.
I'm running Ubuntu 9.10 x64 : 2.6.31-16-generic. It is a fresh install so most things are default.
I currently have the reference design hardware but am still waiting on XMOS to provide the device firmware. Once I have the source I should be able to answer any questions regarding desriptors in more detail. Until then I have the previously mentioned Ubuntu system and an OS X machine running 10.4.11. As far as I understand, 10.6.x is the only OS that currently supports the Audio Class 2.0 and I'm hoping to have access to a machine soon, but not yet.
When I connect the device I get zero output. If I run lsub -v it is not recognised. If I check my syslog I get the following:
Dec 10 00:16:00 sjalloq-desktop kernel: [53352.087740] usb 2-1.2.3: new high speed USB device using ehci_hcd and address 56 Dec 10 00:16:00 sjalloq-desktop kernel: [53352.107747] hub 2-1.2:1.0: unable to enumerate USB device on port 3 Dec 10 00:16:04 sjalloq-desktop kernel: [53356.286145] hub 2-1.2:1.0: Cannot enable port 3. Maybe the USB cable is bad? Dec 10 00:16:07 sjalloq-desktop kernel: [53359.285099] hub 2-1.2:1.0: Cannot enable port 3. Maybe the USB cable is bad? Dec 10 00:16:10 sjalloq-desktop kernel: [53362.284088] hub 2-1.2:1.0: Cannot enable port 3. Maybe the USB cable is bad? Dec 10 00:16:13 sjalloq-desktop kernel: [53365.282591] hub 2-1.2:1.0: Cannot enable port 3. Maybe the USB cable is bad? Dec 10 00:16:13 sjalloq-desktop kernel: [53365.282884] hub 2-1.2:1.0: unable to enumerate USB device on port 3
However, on my OS X machine, if I run USB Prober, I get the output that follows the end of the email.
Is there anything else I can do that would be useful in debugging?
Thanks, Shareef.
__END__
OUTPUT FROM MAC OS X 10.4.11 USB PROBER:
High Speed device @ 3 (0xFD100000): .............................. ............... Miscellaneous/Common Class device: "XMOS USB Audio 2.0" Device Descriptor Descriptor Version Number: 0x0200 Device Class: 239 (Miscellaneous) Device Subclass: 2 (Common Class) Device Protocol: 1 (Interface Association) Device MaxPacketSize: 64 Device VendorID/ProductID: 0x20B1/0x0002 (unknown vendor) Device Version Number: 0x0110 Number of Configurations: 1 Manufacturer String: 12 "XMOS " Product String: 7 "XMOS USB Audio 2.0" Serial Number String: 0 (none) Configuration Descriptor Length (and contents): 273 Raw Descriptor (hex) 0000: 09 02 11 01 03 01 00 80 FA 08 0B 00 03 01 00 20 Raw Descriptor (hex) 0010: 00 09 04 00 00 01 01 01 20 07 09 24 01 00 02 08 Raw Descriptor (hex) 0020: 7B 00 00 08 24 0A 28 03 07 00 01 11 24 02 02 01 Raw Descriptor (hex) 0030: 01 00 28 02 03 00 00 00 00 00 00 02 11 24 02 01 Raw Descriptor (hex) 0040: 03 06 00 28 04 0F 00 00 00 00 00 00 03 0C 24 03 Raw Descriptor (hex) 0050: 16 01 01 00 0B 28 00 00 04 0C 24 03 14 01 03 00 Raw Descriptor (hex) 0060: 0A 28 00 00 05 0C 24 03 16 01 03 00 0A 28 00 00 Raw Descriptor (hex) 0070: 06 12 24 06 0A 02 0F 00 00 00 0F 00 00 00 0F 00 Raw Descriptor (hex) 0080: 00 00 00 12 24 06 0B 01 0F 00 00 00 0F 00 00 00 Raw Descriptor (hex) 0090: 0F 00 00 00 00 07 05 83 03 06 00 08 09 04 01 00 Raw Descriptor (hex) 00a0: 00 01 02 20 08 09 04 01 01 02 01 02 20 09 10 24 Raw Descriptor (hex) 00b0: 01 02 00 01 01 00 00 00 02 03 00 00 00 00 06 24 Raw Descriptor (hex) 00c0: 02 01 04 18 07 05 01 05 00 04 01 08 25 01 00 00 Raw Descriptor (hex) 00d0: 02 08 00 07 05 81 11 04 00 08 09 04 02 00 00 01 Raw Descriptor (hex) 00e0: 02 20 0A 09 04 02 01 01 01 02 20 0B 10 24 01 16 Raw Descriptor (hex) 00f0: 00 01 01 00 00 00 02 03 00 00 00 00 06 24 02 01 Raw Descriptor (hex) 0100: 04 18 07 05 82 05 00 04 01 08 25 01 00 00 02 08 Raw Descriptor (hex) 0110: 00 Number of Interfaces: 3 Configuration Value: 1 Attributes: 0x80 (bus-powered) MaxPower: 500 ma Interface Association Audio/Unknown First Interface 0 Interface Count 3 Function Class 1 (Audio) Function Subclass 0 (Unknown) Interface Protocol 32 Function String 0 (none) Interface #0 - Audio/Control Alternate Setting 0 Number of Endpoints 1 Interface Class: 1 (Audio) Interface Subclass; 1 (Control) Interface Protocol: 32 Audio Control Class Specific Header Descriptor Version Number: 02.00 Category: 8 Class Specific Size: 123 bmControls: 0 Dump Contents (hex): 09 24 01 00 02 08 7B 00 00 Audio Class Specific Clock Source Clock ID: 40 Attributes: Internal Programmable Clock Controls: 7 Associated Terminal: 0 Terminal Name String Index: 1 Dump Contents (hex): 08 24 0A 28 03 07 00 01 Audio Class Specific Input Terminal Terminal ID: 2 Input Terminal Type: 0x101 (USB streaming) OutTerminal ID: 0 [NONE] Number of Channels: 2 Spatial config of channels: 0000000000000011 (null) (null) String index for first logical channel: 0 Terminal Name String Index: 2 Dump Contents (hex): 11 24 02 02 01 01 00 28 02 03 00 00 00 00 00 00 02 Audio Class Specific Input Terminal Terminal ID: 1 Input Terminal Type: 0x603 (Line connector) OutTerminal ID: 0 [NONE] Number of Channels: 4 Spatial config of channels: 0000000000001111 (null) (null) (null) (null) String index for first logical channel: 0 Terminal Name String Index: 3 Dump Contents (hex): 11 24 02 01 03 06 00 28 04 0F 00 00 00 00 00 00 03 Audio Class Specific Ouput Terminal Terminal ID: 22 Output Terminal Type: 0x101 (USB Isochronous Stream) InTerminal ID: 0 [NONE] Source ID: 11 Terminal Name String Index: 4 Dump Contents (hex): 0C 24 03 16 01 01 00 0B 28 00 00 04 Audio Class Specific Ouput Terminal Terminal ID: 20 Output Terminal Type: 0x301 (Speaker) InTerminal ID: 0 [NONE] Source ID: 10 Terminal Name String Index: 5 Dump Contents (hex): 0C 24 03 14 01 03 00 0A 28 00 00 05 Audio Class Specific Ouput Terminal Terminal ID: 22 Output Terminal Type: 0x301 (Speaker) InTerminal ID: 0 [NONE] Source ID: 10 Terminal Name String Index: 6 Dump Contents (hex): 0C 24 03 16 01 03 00 0A 28 00 00 06 Audio Class Specific Feature Unit ID: 10 Source ID: 2 Number of Channels (ch): 2 Master Channel:......................... ( Mute:RW Volume:RW ) Channel 1:............................. ( Mute:RW Volume:RW ) Channel 2:............................. ( Mute:RW Volume:RW ) Feature Unit Name String Index: 0 Dump Contents (hex): 12 24 06 0A 02 0F 00 00 00 0F 00 00 00 0F 00 00 00 00 Audio Class Specific Feature Unit ID: 11 Source ID: 1 Number of Channels (ch): 2 Master Channel:......................... ( Mute:RW Volume:RW ) Channel 1:............................. ( Mute:RW Volume:RW ) Channel 2:............................. ( Mute:RW Volume:RW ) Feature Unit Name String Index: 0 Dump Contents (hex): 12 24 06 0B 01 0F 00 00 00 0F 00 00 00 0F 00 00 00 00 Endpoint 0x83 - Interrupt Input Address: 0x83 (IN) Attributes: 0x03 (Interrupt no synchronization data endpoint) Max Packet Size: 6 (6 x 1 transactions opportunities per microframe) Polling Interval: 8 (128 microframes (16 msecs) ) Interface #1 - Audio/Streaming Alternate Setting 0 Number of Endpoints 0 Interface Class: 1 (Audio) Interface Subclass; 2 (Streaming) Interface Protocol: 32 Interface #1 - Audio/Streaming (#1) Alternate Setting 1 Number of Endpoints 2 Interface Class: 1 (Audio) Interface Subclass; 2 (Streaming) Interface Protocol: 32 Audio Control Class Specific Header Audio Stream General Endpoint Terminal ID: 2 Format Type: 1 Formats PCM Number of Channels 2 Channel Configuration 3 Dump Contents (hex): 10 24 01 02 00 01 01 00 00 00 02 03 00 00 00 00 Audio Class Specific Audio Data Format Audio Stream Format Type Desc. Format Type: 1 Slot Size: 4 Bit Resolution: 24 Dump Contents (hex): 06 24 02 01 04 18 Endpoint 0x01 - Isochronous Output Address: 0x01 (OUT) Attributes: 0x05 (Isochronous asynchronous data endpoint) Max Packet Size: 1024 (1024 x 1 transactions opportunities per microframe) Polling Interval: 1 (1 microframe (125 microsecs) ) Class-Specific AS Audio EndPoint - Control output Attributes: 0x00 bLockDelayUnits: 0x00 (UNDEFINED) wLockDelay: 2050 Endpoint 0x81 - Isochronous Input Address: 0x81 (IN) Attributes: 0x11 (Isochronous no synchronization feedback endpoint) Max Packet Size: 4 (4 x 1 transactions opportunities per microframe) Polling Interval: 8 (128 microframes (16 msecs) ) Interface #2 - Audio/Streaming Alternate Setting 0 Number of Endpoints 0 Interface Class: 1 (Audio) Interface Subclass; 2 (Streaming) Interface Protocol: 32 Interface #2 - Audio/Streaming (#1) Alternate Setting 1 Number of Endpoints 1 Interface Class: 1 (Audio) Interface Subclass; 2 (Streaming) Interface Protocol: 32 Audio Control Class Specific Header Audio Stream General Endpoint Terminal ID: 22 Format Type: 1 Formats PCM Number of Channels 2 Channel Configuration 3 Dump Contents (hex): 10 24 01 16 00 01 01 00 00 00 02 03 00 00 00 00 Audio Class Specific Audio Data Format Audio Stream Format Type Desc. Format Type: 1 Slot Size: 4 Bit Resolution: 24 Dump Contents (hex): 06 24 02 01 04 18 Endpoint 0x82 - Isochronous Input Address: 0x82 (IN) Attributes: 0x05 (Isochronous asynchronous data endpoint) Max Packet Size: 1024 (1024 x 1 transactions opportunities per microframe) Polling Interval: 1 (1 microframe (125 microsecs) ) Class-Specific AS Audio EndPoint - Control output Attributes: 0x00 bLockDelayUnits: 0x00 (UNDEFINED) wLockDelay: 2050 Device Qualifier Descriptor Descriptor Version Number: 0x0200 Device Class 239 (Miscellaneous) Device Subclass 2 (Common Class) Device Protocol 1 (Interface Association) Device MaxPacketSize: 64 Number of Configurations: 1 bReserved: 0 Other Speed Configuration Descriptor Length (and contents): 18 Raw Descriptor (hex) 0000: 09 07 12 00 01 00 00 C0 32 09 04 00 00 00 00 00 Raw Descriptor (hex) 0010: 00 00 Number of Interfaces: 1 Configuration Value: 0 Attributes: 0xC0 (self-powered) MaxPower: 100 ma Interface #0 - Unknown Alternate Setting 0 Number of Endpoints 0 Interface Class: 0 (Unknown) Interface Subclass; 0 Interface Protocol: 0
On Mon, Dec 14, 2009 at 06:51:41PM +0000, Shareef Jalloq wrote:
I'm starting a product development using the XMOS USB Audio Class 2.0 Ref Design (http://www.xmos.com/technology/prototype-boards/usbaudio2) and I'd like to get some help in understanding what support there is, or will be, for Audio Class 2.0 devices within Linux.
This audio 2.0 USB class is currently unsupporteed by the Linux kernel, someone would need to start implementing the protocol. Fortunately, it is well documented on usb.org.
There have been people on this list saying they would like to work on this, but there was no reference implementation available yet, so it wasn't started.
I currently have the reference design hardware but am still waiting on XMOS to provide the device firmware. Once I have the source I should be able to answer any questions regarding desriptors in more detail. Until then I have the previously mentioned Ubuntu system and an OS X machine running 10.4.11. As far as I understand, 10.6.x is the only OS that currently supports the Audio Class 2.0 and I'm hoping to have access to a machine soon, but not yet.
10.5 will also get suport for it. Which is important as it is the last OS X that supports PPC machines. All earlier version, though, lack support for that.
Dec 10 00:16:00 sjalloq-desktop kernel: [53352.087740] usb 2-1.2.3: new high speed USB device using ehci_hcd and address 56 Dec 10 00:16:00 sjalloq-desktop kernel: [53352.107747] hub 2-1.2:1.0: unable to enumerate USB device on port 3 Dec 10 00:16:04 sjalloq-desktop kernel: [53356.286145] hub 2-1.2:1.0: Cannot enable port 3. Maybe the USB cable is bad? Dec 10 00:16:07 sjalloq-desktop kernel: [53359.285099] hub 2-1.2:1.0: Cannot enable port 3. Maybe the USB cable is bad? Dec 10 00:16:10 sjalloq-desktop kernel: [53362.284088] hub 2-1.2:1.0: Cannot enable port 3. Maybe the USB cable is bad? Dec 10 00:16:13 sjalloq-desktop kernel: [53365.282591] hub 2-1.2:1.0: Cannot enable port 3. Maybe the USB cable is bad? Dec 10 00:16:13 sjalloq-desktop kernel: [53365.282884] hub 2-1.2:1.0: unable to enumerate USB device on port 3
That points you to a different problem. You should report that to the XMOS people. As long as the device probing fails at this level, there is no way the ALSA driver will possibly get control over the device, so that needs to be fixed first.
However, on my OS X machine, if I run USB Prober, I get the output that follows the end of the email.
OUTPUT FROM MAC OS X 10.4.11 USB PROBER:
Yep, that does indeed help. You lsusb -v should print something similar, even though it might not decode the header so well.
I don't know the USB class audio driver too well, so I can't help much on the question where to start implementing.
HTH, Daniel
participants (2)
-
Daniel Mack
-
Shareef Jalloq