Solved Any chance of getting old USB soundcard to work? (Roland UA-33 or Tri-Capture)

I have an old UA-33 that I like.

It's a reliable workhorse. Unfortunately it's old enough to not be USB compliant, ie it requires a driver. Roland at the time only made drivers for Windows and Mac.

Also, I don't know much about USB. Almost nothing apart from the occasional dd to create a memstick.

Inspired by this thread I plugged Roland into an old laptop running 15.0-RELEASE-p5 and I can see that it identifies correctly. If I run usbconfig list it lists the device with correct name Roland Tri-Capture!

Wonderful - there is hope!

But when I run cat /dev/sndstat there is nothing except the internal soundcard.

Some googling ensued and I found two interesting tidbits.

  1. The reason the device is identified is probably because that the ALSA project added a bunch of Roland devices according to this link
  2. This link (translated from .jp) claims that the device is working on Ubuntu 20.04 because of a commit to the Linux kernel in 2013
Quote from the translated .jp link.  "By the way, I looked into the source code to find out why UA -11 works even in vendor-specific operating modes that are not USB Audio class compliant , and why UA -33, which is completely vendor-specific, also works . It seems that this was addressed in the following commit from 2013: kernel/git/torvalds/linux.git - Linux kernel source tree. This commit roughly contains some universal code that says, "Devices with a vendor-specific device class, a vendor ID of Roland or Yamaha , and that use isochronous for transfer mode are audio devices right? If we can identify the data format , we'll make them work as PCM devices." This allows a large amount of Roland and Yamaha equipment to work with ALSA *4 . As a result, it seems that snd-usb-audio's quirks-related source code can now work even without device-specific code for UA -11 and UA -33."

Is there any chance of making the Roland Tri Capture working on FreeBSD 15?​
/grandpa






The Roland TRI-CAPTURE (UA-33) is a compact, 24-bit/96 kHz USB audio interface designed for mobile recording, podcasting, and streaming, featuring dedicated mic, guitar, and AUX inputs.
 
Hello and thanks for replying!

This is how it looks:

dmesg | grep ugen1.2
ugen1.2: <Roland TRI-CAPTURE> at usbus1


kldstat | grep snd_driver
29 1 0xffffffff836bd000 24d8 snd_driver.ko


cat /dev/sndstat
Installed devices:
pcm0: <ATI R6xx (HDMI)> (play)
pcm1: <Realtek ALC282 (Analog)> (play/rec) default
pcm2: <Realtek ALC282 (Analog)> (play/rec)
No devices installed from userspace.


ps aux | grep alsa
root 220 0.0 0.0 19080 3764 - S<s 13:29 0:00.20 /usr/local/sbin/alsa-seq-server -B -F umidi -i 8


My guess is that alsa identifies the device but I don't know if there's some usb stuff (quirks?) that I need to do to get in contact with it.

/grandpa
 
Adding a little more info:

# uname -a
FreeBSD freebsd15KDE-hp15g041so 15.0-RELEASE-p5 FreeBSD 15.0-RELEASE-p5 releng/15.0-n281018-0730d5233286 GENERIC amd64



# dmesg | grep uaudio
#



# cat /dev/sndstat
Installed devices:
pcm0: <ATI R6xx (HDMI)> (play)
pcm1: <Realtek ALC282 (Analog)> (play/rec) default
pcm2: <Realtek ALC282 (Analog)> (play/rec)
No devices installed from userspace.



# usbconfig
ugen0.1: <XHCI root HUB AMD> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=SAVE (0mA)
ugen1.1: <OHCI root HUB AMD> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE (0mA)
ugen2.1: <EHCI root HUB AMD> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)
ugen4.1: <EHCI root HUB AMD> at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)
ugen3.1: <OHCI root HUB AMD> at usbus3, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE (0mA)
ugen0.2: <Wireless Keyboard/Mouse MosArt Semiconductor Corp.> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)
ugen4.2: <Webcam Cheng Uei Precision Industry Co., Ltd (Foxlink)> at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)
ugen1.2: <TRI-CAPTURE Roland Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (450mA)



# usbconfig -d 1.2 dump_all_desc
ugen1.2: <TRI-CAPTURE Roland Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (450mA)

bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0110
bDeviceClass = 0x00ff <Vendor specific>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x00ff
bMaxPacketSize0 = 0x0040
idVendor = 0x0582
idProduct = 0x0132
bcdDevice = 0x0100
iManufacturer = 0x0001 <Roland>
iProduct = 0x0002 <TRI-CAPTURE>
iSerialNumber = 0x0000 <no string>
bNumConfigurations = 0x0001

Configuration index 0

bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0073
bNumInterfaces = 0x0002
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x0080
bMaxPower = 0x00e1

Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0000
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0002
iInterface = 0x0000 <no string>

Additional Descriptor

bLength = 0x06
bDescriptorType = 0x24
bDescriptorSubType = 0xf1
RAW dump:
0x00 | 0x06, 0x24, 0xf1, 0x01, 0x00, 0x00



Interface 0 Alt 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0001
bNumEndpoints = 0x0001
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0002
iInterface = 0x0000 <no string>

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x24
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x24, 0x01, 0x01, 0x00, 0x01, 0x00


Additional Descriptor

bLength = 0x0b
bDescriptorType = 0x24
bDescriptorSubType = 0x02
RAW dump:
0x00 | 0x0b, 0x24, 0x02, 0x01, 0x02, 0x03, 0x18, 0x01,
0x08 | 0x44, 0xac, 0x00


Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0001 <OUT>
bmAttributes = 0x0009 <ADAPT-ISOCHRONOUS>
wMaxPacketSize = 0x0120
bInterval = 0x0001
bRefresh = 0x0000
bSynchAddress = 0x0000

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x25
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x25, 0x01, 0x00, 0x02, 0x00, 0x02



Interface 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0000
bNumEndpoints = 0x0000
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0001
iInterface = 0x0000 <no string>


Interface 1 Alt 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0001
bNumEndpoints = 0x0001
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0001
iInterface = 0x0000 <no string>

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x24
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x24, 0x01, 0x07, 0x00, 0x01, 0x00


Additional Descriptor

bLength = 0x0b
bDescriptorType = 0x24
bDescriptorSubType = 0x02
RAW dump:
0x00 | 0x0b, 0x24, 0x02, 0x01, 0x02, 0x03, 0x18, 0x01,
0x08 | 0x44, 0xac, 0x00


Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0082 <IN>
bmAttributes = 0x0005 <ASYNC-ISOCHRONOUS>
wMaxPacketSize = 0x0120
bInterval = 0x0001
bRefresh = 0x0000
bSynchAddress = 0x0000

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x25
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x25, 0x01, 0x00, 0x00, 0x00, 0x00


/grandpa
 
As on the mailing list :-)

On Fri, Apr 24, 2026 at 6:48 AM Roger Olofsson wrote:
> Hello,
> Is there any chance of making the Roland Tri Capture working on FreeBSD 15?
> It's a device that is _NOT_ USB compliant, ie it utilizes drivers to work on Mac and Win.

It is "USB compliant" as it already works over USB, it just does not
expose standard audio interfaces - engineering decision with some
reasons behind but makes it incompatible with standard audio stack.

> However, it is being reported as working on Ubuntu20.04.
> FreeBSD15 identifies the device when it's plugged in.

As above except Linux has dedicated driver for this specific device
and turns "custom USB device" into "standard audio device" in the OS.
On FreeBSD we have VirtualOSS [1] that could do that from the
userspace, or standard kernel module, but the driver needs to be
ported.. maybe just USB quirks needs to be added like in Linux [2] in
order to make it work with existing snd_uaudio?

I am adding christos / Christos Margiolis out current audio stack maintainer
maybe you can hire him for the job? :-)

[1] https://www.freshports.org/audio/virtual_oss/
[2] https://git.kernel.org/pub/scm/linu...6&id=aafe77cc45a595ca1d4536f2412ddf671ea9108c
 
OP,

I feel your pain.
I have a working perfectly UA-25 that is forcibly retired because there are no drivers above Windows 8.1

I replaced it with a MOTU M4 which has drivers for everything.
 
And I'm guessing # kldload snd_uaudio doesn't help?
The problem here is that the device reports as
Code:
bInterfaceClass = 0x00ff  &lt;Vendor specific&gt;
instead of the correct class for usb audio. you will need a patch for snd_uaudio.
 
I have input from the mailing list that I need to add the device with product id 0x0132 to /usr/src/sys/dev/usb/usbdevs as well as adding it to /usr/src/sys/dev/usb/quirk.c with the quirk UQ_AU_VENDOR_CLASS.

I'm trying that as I write this (means rebuilding kernel with the two changes).

/grandpa
 
Okay.

Sorry there again. Friday evening tipsyness.

So, I rebuilt kernel after adding the following line to /usr/src/sys/dev/usb/usbdevs:

Code:
product ROLAND UA33             0x0132  UA-33 Audio I/F

And this line changed in /usr/src/sys/dev/usb/quirk/usb_quirk.c:

Code:
USB_QUIRK(ROLAND, UA33, UQ_AU_VENDOR_CLASS),

And also I kldloaded snd_uaudio and replugged the device:

# kldload snd_uaudio
#


But still no luck.

# cat /dev/sndstat
Installed devices:
pcm0: <ATI R6xx (HDMI)> (play)
pcm1: <Realtek ALC282 (Analog)> (play/rec) default
pcm2: <Realtek ALC282 (Analog)> (play/rec)
No devices installed from userspace.


# uname -a
FreeBSD freebsd15KDE-hp15g041so 15.0-RELEASE-p6 FreeBSD 15.0-RELEASE-p6 #2 releng/15.0-n281024-6b6bc9afa0b0-dirty: Sat Apr 25 14:56:20 CEST 2026
user@freebsd15KDE-hp15g041so:/usr/obj/usr/src/amd64.amd64/sys/ROLAND amd64


# kldstat | grep snd_
29 2 0xffffffff836bd000 e5b0 snd_uaudio.ko
30 1 0xffffffff836cc000 24d8 snd_driver.ko
31 1 0xffffffff836cf000 3200 snd_als4000.ko
32 1 0xffffffff836d3000 41e8 snd_atiixp.ko
33 1 0xffffffff836d8000 31f0 snd_cs4281.ko
34 1 0xffffffff836dc000 5490 snd_envy24.ko
35 3 0xffffffff836e2000 2110 snd_spicds.ko
36 1 0xffffffff836e5000 4670 snd_envy24ht.ko
37 1 0xffffffff836ea000 2230 snd_fm801.ko
38 1 0xffffffff836ed000 5609 snd_hdsp.ko
39 1 0xffffffff836f3000 5649 snd_hdspe.ko
40 1 0xffffffff836f9000 7ce0 snd_maestro3.ko
41 1 0xffffffff83701000 f1d0 snd_neomagic.ko
42 1 0xffffffff83711000 4230 snd_solo.ko
43 1 0xffffffff83716000 3250 snd_t4dwave.ko
44 1 0xffffffff8371a000 31f0 snd_via82c686.ko
45 1 0xffffffff8371e000 4200 snd_vibes.ko


# usbconfig | grep Roland
ugen1.2: <TRI-CAPTURE Roland Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (450mA)


Still reports bInterfaceClass = 0x00ff.

# usbconfig -d ugen1.2 dump_all_desc
ugen1.2: <TRI-CAPTURE Roland Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (450mA)

bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0110
bDeviceClass = 0x00ff <Vendor specific>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x00ff
bMaxPacketSize0 = 0x0040
idVendor = 0x0582
idProduct = 0x0132
bcdDevice = 0x0100
iManufacturer = 0x0001 <Roland>
iProduct = 0x0002 <TRI-CAPTURE>
iSerialNumber = 0x0000 <no string>
bNumConfigurations = 0x0001

Configuration index 0

bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0073
bNumInterfaces = 0x0002
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x0080
bMaxPower = 0x00e1

Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0000
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0002
iInterface = 0x0000 <no string>

Additional Descriptor

bLength = 0x06
bDescriptorType = 0x24
bDescriptorSubType = 0xf1
RAW dump:
0x00 | 0x06, 0x24, 0xf1, 0x01, 0x00, 0x00



Interface 0 Alt 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0001
bNumEndpoints = 0x0001
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0002
iInterface = 0x0000 <no string>

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x24
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x24, 0x01, 0x01, 0x00, 0x01, 0x00


Additional Descriptor

bLength = 0x0b
bDescriptorType = 0x24
bDescriptorSubType = 0x02
RAW dump:
0x00 | 0x0b, 0x24, 0x02, 0x01, 0x02, 0x03, 0x18, 0x01,
0x08 | 0x44, 0xac, 0x00


Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0001 <OUT>
bmAttributes = 0x0009 <ADAPT-ISOCHRONOUS>
wMaxPacketSize = 0x0120
bInterval = 0x0001
bRefresh = 0x0000
bSynchAddress = 0x0000

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x25
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x25, 0x01, 0x00, 0x02, 0x00, 0x02



Interface 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0000
bNumEndpoints = 0x0000
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0001
iInterface = 0x0000 <no string>


Interface 1 Alt 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0001
bNumEndpoints = 0x0001
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0001
iInterface = 0x0000 <no string>

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x24
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x24, 0x01, 0x07, 0x00, 0x01, 0x00


Additional Descriptor

bLength = 0x0b
bDescriptorType = 0x24
bDescriptorSubType = 0x02
RAW dump:
0x00 | 0x0b, 0x24, 0x02, 0x01, 0x02, 0x03, 0x18, 0x01,
0x08 | 0x44, 0xac, 0x00


Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0082 <IN>
bmAttributes = 0x0005 <ASYNC-ISOCHRONOUS>
wMaxPacketSize = 0x0120
bInterval = 0x0001
bRefresh = 0x0000
bSynchAddress = 0x0000

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x25
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x25, 0x01, 0x00, 0x00, 0x00, 0x00


Also tried manually applying the quirk and unplug/replug but still same.

(As a sidenote I had to do pkg unregister for the kernel installed by 15 installer. Yes I installed the pkg technology preview. T-Daemon and Cedric has more info in this thread.)

/grandpa
 
This one is not USB AUDIO CLASS COMPLIANT. You need a specific driver for it to work. This driver do not exist for FreeBSD.
If an USB audio interface need a specific driver for macOS/iOS, it's not compliant to the USB AUDIO CLASS.
 
This one is not USB AUDIO CLASS COMPLIANT. You need a specific driver for it to work. This driver do not exist for FreeBSD.
If an USB audio interface need a specific driver for macOS/iOS, it's not compliant to the USB AUDIO CLASS.

Yes, you are absolutely correct, although I knew this from start and I briefly mention it in the first post.

...

It's a reliable workhorse. Unfortunately it's old enough to not be USB compliant, ie it requires a driver. Roland at the time only made drivers for Windows and Mac.

The hope I have is that since this device is being reported as working on Ubuntu20.04 (see post #1) it also could be made to work on FreeBSD.

/grandpa
 
Op I wish you success but this seems like a giant PITA compared to buying a modern sound card that plays nice in your environment.

I have two MOTU M4: one for my dedicated DAW, the second for my portable performance laptop and system.
 
Op I wish you success but this seems like a giant PITA compared to buying a modern sound card that plays nice in your environment.

I have two MOTU M4: one for my dedicated DAW, the second for my portable performance laptop and system.

Thanks for the empathy!

I see it as two things, a learning experience for usb for an operating system that I care about and a way to avoid installing Ubuntu (see #1).

/grandpa
 
And I'm guessing kldload snd_uaudio doesn't help?
The problem here is that the device reports as

bInterfaceClass = 0x00ff Vendor specific

instead of the correct class for usb audio. you will need a patch for snd_uaudio.

I think you are right.

The usb quirk is in the kernel. There are two endpoints, as seen with usbconfig, one is OUT (ADAPT-ISOCHRONOUS) and the other is IN (ASYNC-ISOCHRONOUS). There is no driver attached to the device reported by usbconfig.

# usbconfig dump_device_quirks | grep 0x0132
VID=0x0582 PID=0x0132 REVLO=0x0000 REVHI=0xffff QUIRK=UQ_AU_VENDOR_CLASS


# usbconfig -d ugen1.2 dump_curr_config_desc
ugen1.2: <TRI-CAPTURE Roland Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (450mA)


Configuration index 0

bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0073
bNumInterfaces = 0x0002
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x0080
bMaxPower = 0x00e1

Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0000
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0002
iInterface = 0x0000 <no string>

Additional Descriptor

bLength = 0x06
bDescriptorType = 0x24
bDescriptorSubType = 0xf1
RAW dump:
0x00 | 0x06, 0x24, 0xf1, 0x01, 0x00, 0x00



Interface 0 Alt 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0001
bNumEndpoints = 0x0001
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0002
iInterface = 0x0000 <no string>

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x24
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x24, 0x01, 0x01, 0x00, 0x01, 0x00


Additional Descriptor

bLength = 0x0b
bDescriptorType = 0x24
bDescriptorSubType = 0x02
RAW dump:
0x00 | 0x0b, 0x24, 0x02, 0x01, 0x02, 0x03, 0x18, 0x01,
0x08 | 0x44, 0xac, 0x00


Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0001 <OUT>
bmAttributes = 0x0009 <ADAPT-ISOCHRONOUS>
wMaxPacketSize = 0x0120
bInterval = 0x0001
bRefresh = 0x0000
bSynchAddress = 0x0000

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x25
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x25, 0x01, 0x00, 0x02, 0x00, 0x02



Interface 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0000
bNumEndpoints = 0x0000
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0001
iInterface = 0x0000 <no string>


Interface 1 Alt 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0001
bNumEndpoints = 0x0001
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x0002
bInterfaceProtocol = 0x0001
iInterface = 0x0000 <no string>

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x24
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x24, 0x01, 0x07, 0x00, 0x01, 0x00


Additional Descriptor

bLength = 0x0b
bDescriptorType = 0x24
bDescriptorSubType = 0x02
RAW dump:
0x00 | 0x0b, 0x24, 0x02, 0x01, 0x02, 0x03, 0x18, 0x01,
0x08 | 0x44, 0xac, 0x00


Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0082 <IN>
bmAttributes = 0x0005 <ASYNC-ISOCHRONOUS>
wMaxPacketSize = 0x0120
bInterval = 0x0001
bRefresh = 0x0000
bSynchAddress = 0x0000

Additional Descriptor

bLength = 0x07
bDescriptorType = 0x25
bDescriptorSubType = 0x01
RAW dump:
0x00 | 0x07, 0x25, 0x01, 0x00, 0x00, 0x00, 0x00



# usbconfig -d ugen1.2 dump_stats
ugen1.2: <TRI-CAPTURE Roland Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (450mA)

{
UE_CONTROL_OK : 77
UE_ISOCHRONOUS_OK : 0
UE_BULK_OK : 0
UE_INTERRUPT_OK : 0
UE_CONTROL_FAIL : 0
UE_ISOCHRONOUS_FAIL : 0
UE_BULK_FAIL : 0
UE_INTERRUPT_FAIL : 0
}


# usbconfig -d ugen1.2 show_ifdrv
ugen1.2: <TRI-CAPTURE Roland Corp.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (450mA)


/grandpa
 
And it's not as easy as just adding this line to /usr/src/sys/dev/sound/usb/uaudio.c and recompile the kernel since that didn't work either. Seems like there's more stuff missing.

Hahahahah. Note to self. Please remember to do make installkernel after doing make buildkernel.

This was as easy as just adding this line to /usr/src/sys/dev/sound/usb/uaudio.c and recompile the kernel and then installing that kernel ...

C:
if (uaa->info.idVendor == 0x0582 && uaa->info.idProduct== 0x0132) return (BUS_PROBE_GENERIC);

# cat /dev/sndstat
Installed devices:
pcm0: <ATI R6xx (HDMI)> (play)
pcm1: <Realtek ALC282 (Analog)> (play/rec) default
pcm2: <Realtek ALC282 (Analog)> (play/rec)
pcm3: <Roland TRI-CAPTURE> (play/rec)


Let's see if it works as expected!

/grandpa
 
Works just fine. I have made a clumsy attempt to submit the patches to Bugzilla.

I will mark this thread as solved with this summary:

To make Roland UA33 (Tri-Capture) work on 15-RELEASE add the following changes and rebuild/install kernel.

File /usr/src/sys/dev/usb/usbdevs:
C:
product ROLAND UA33             0x0132  UA-33 Audio I/F

File /usr/src/sys/dev/usb/quirk/usb_quirk.c:
C:
USB_QUIRK(ROLAND, UA33, UQ_AU_VENDOR_CLASS),

File /usr/src/sys/dev/sound/usb/uaudio.c:
C:
if (uaa->info.idVendor == 0x0582 && uaa->info.idProduct== 0x0132) return (BUS_PROBE_GENERIC);

Edit: Also note that snd_driver needs to be loaded. I do this from rc.conf.

/etc/rc.conf
kld_list="snd_driver"

I will now need to edit my post about Recording guitar audio using jack, carla, ardour and lv2 plugins.

Again, thanks to tingo for setting me on the right track and thanks to the freebsd-usb mailing list for getting me started.

/grandpa
 
Note for USB quirks settings.
You can set it via /boot/loader.conf (to be sure set before uaudio and/or other required modules are loaded) like below.
Code:
hw.usb.quirk.0="0x0582 0x0132 0x0000 0xffff UQ_AU_VENDOR_CLASS"

You still need to build / install kernel and needed modules if you need to modify stock code other than /usr/src/sys/dev/usb/usbdevs, but if setting quirks alone is sufficient and generic class driver like uaudio with quirks works fine, the above may be OK.

If you want multiple quirks, add hw.usb.quirk.1 and later as needed.
 
Back
Top