Dragonfly USB DAC under 9.1-RELEASE
Craig Leres
leres at ee.lbl.gov
Sun Apr 21 18:38:03 UTC 2013
First let me say that I did a quick install of FreeBSD 10.0-CURRENT
(r249439) onto a spare system yesterday and was able to play various
source material with no glitches. Then I back ported the 10.0-CURRENT
/sys/dev/sound tree (r249715) to my 9.1-RELEASE system and this solved
my remaining audio issues. There were bug fixes but it looks like the
bulk of the changes add support for USB Audio v2.0.
On 04/21/13 08:57, Hans Petter Selasky wrote:
> There are multiple options for debugging this issue.
>
> 1) Look at the usbdump utility for dumping the data communication for
> your device:
>
> usbdump -i usbusX -f Y -s 65536
I did find usbdump earlier but don't know enough about usb audio to be
able to identify any problems.
> I suspect your device uses rate adaption, and that it does not work
> properly.
The Dragonfly supports 44.1, 48, 88.2 and 96 and one goal of mine is to
not be doing any additional conversion so I'm hoping it's not doing that!
> What does:
>
> usbconfig -d X.Y dump_curr_config_desc
>
> Say?
Attached. I also installed usbutils and have attached output from "lsusb
-v".
> See also:
>
> sysctl hw.usb.uaudio.debug=15
hw.usb.uaudio.debug was very helpful the original sample rate mismatch
problem.
One thing that's annoying is the way dev/sound/usb/uaudio.c is
structured, the sample rate is programmed in the Dragonfly only when the
device is inserted; there's no way to change rates once it's plugged in.
Thanks for the suggestions.
Craig
-------------- next part --------------
ugen1.2: <AudioQuest DragonFly AudioQuest inc.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
Configuration index 0
bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0083
bNumInterfaces = 0x0002
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x0080
bMaxPower = 0x0064
Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0000
bInterfaceClass = 0x0001
bInterfaceSubClass = 0x0001
bInterfaceProtocol = 0x0000
iInterface = 0x0000 <no string>
Additional Descriptor
bLength = 0x09
bDescriptorType = 0x24
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x09, 0x24, 0x01, 0x00, 0x01, 0x2b, 0x00, 0x01,
0x08 | 0x01
Additional Descriptor
bLength = 0x0c
bDescriptorType = 0x24
bDescriptorSubType = 0x02
RAW dump:
0x00 | 0x0c, 0x24, 0x02, 0x05, 0x01, 0x01, 0x00, 0x02,
0x08 | 0x03, 0x00, 0x00, 0x00
Additional Descriptor
bLength = 0x0d
bDescriptorType = 0x24
bDescriptorSubType = 0x06
RAW dump:
0x00 | 0x0d, 0x24, 0x06, 0x07, 0x05, 0x02, 0x01, 0x00,
0x08 | 0x02, 0x00, 0x02, 0x00, 0x00
Additional Descriptor
bLength = 0x09
bDescriptorType = 0x24
bDescriptorSubType = 0x03
RAW dump:
0x00 | 0x09, 0x24, 0x03, 0x08, 0x01, 0x03, 0x00, 0x07,
0x08 | 0x00
Interface 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0000
bNumEndpoints = 0x0000
bInterfaceClass = 0x0001
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0000
iInterface = 0x0000 <no string>
Interface 1 Alt 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0001
bNumEndpoints = 0x0002
bInterfaceClass = 0x0001
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0000
iInterface = 0x0000 <no string>
Additional Descriptor
bLength = 0x07
bDescriptorType = 0x24
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x24, 0x01, 0x05, 0x01, 0x01, 0x00
Additional Descriptor
bLength = 0x14
bDescriptorType = 0x24
bDescriptorSubType = 0x02
RAW dump:
0x00 | 0x14, 0x24, 0x02, 0x01, 0x02, 0x03, 0x18, 0x04,
0x08 | 0x44, 0xac, 0x00, 0x80, 0xbb, 0x00, 0x88, 0x58,
0x10 | 0x01, 0x00, 0x77, 0x01
Endpoint 0
bLength = 0x0009
bDescriptorType = 0x0005
bEndpointAddress = 0x0001 <OUT>
bmAttributes = 0x0005 <ASYNC-ISOCHRONOUS>
wMaxPacketSize = 0x024c
bInterval = 0x0001
bRefresh = 0x0000
bSynchAddress = 0x0083
Additional Descriptor
bLength = 0x07
bDescriptorType = 0x25
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x25, 0x01, 0x01, 0x00, 0x00, 0x00
Endpoint 1
bLength = 0x0009
bDescriptorType = 0x0005
bEndpointAddress = 0x0083 <IN>
bmAttributes = 0x0001 <ISOCHRONOUS>
wMaxPacketSize = 0x0003
bInterval = 0x0001
bRefresh = 0x0005
bSynchAddress = 0x0000
-------------- next part --------------
Bus /dev/usb Device /dev/ugen1.2: ID 21b4:0081
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x21b4
idProduct 0x0081
bcdDevice 1.0c
iManufacturer 1 AudioQuest inc.
iProduct 2 AudioQuest DragonFly
iSerial 3 (C) 2011 Wavelength Audio, ltd.
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 131
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 200mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 0
iInterface 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 43
bInCollection 1
baInterfaceNr( 0) 1
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 5
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 13
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 7
bSourceID 5
bControlSize 2
bmaControls( 0) 0x01
bmaControls( 0) 0x00
Mute
bmaControls( 1) 0x02
bmaControls( 1) 0x00
Volume
bmaControls( 2) 0x02
bmaControls( 2) 0x00
Volume
iFeature 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 8
wTerminalType 0x0301 Speaker
bAssocTerminal 0
bSourceID 7
iTerminal 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 2
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 1 frames
wFormatTag 1 PCM
AudioStreaming Interface Descriptor:
bLength 20
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 3
bBitResolution 24
bSamFreqType 4 Discrete
tSamFreq[ 0] 44100
tSamFreq[ 1] 48000
tSamFreq[ 2] 88200
tSamFreq[ 3] 96000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x024c 1x 588 bytes
bInterval 1
bRefresh 0
bSynchAddress 131
AudioControl Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x01
Sampling Frequency
bLockDelayUnits 0 Undefined
wLockDelay 0 Undefined
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0003 1x 3 bytes
bInterval 1
bRefresh 5
bSynchAddress 0
Device Status: 0x0001
Self Powered
More information about the freebsd-multimedia
mailing list