diff options
| author | Christos Margiolis <christos@FreeBSD.org> | 2026-04-28 16:39:45 +0000 |
|---|---|---|
| committer | Christos Margiolis <christos@FreeBSD.org> | 2026-04-30 15:18:30 +0000 |
| commit | 549e740619873716b796a841a10f56fae3c3ad49 (patch) | |
| tree | dea7e8fb4eeb2f853a273c4fe4855f35456f2655 | |
| parent | 0ed292531e0457f271b838dd9dc99a86534d3a99 (diff) | |
snd_uaudio: Support Roland UA-33
Apply the appropriate quirk. Also, introduce a new uaudio_vendor_audio
table, similar to uaudio_vendor_midi, which includes non-standard USB
audio devices. The Roland UA-33 needs this, bceause it comes with
bInterfaceClass = 0xff (vendor-specific), so snd_uaudio(4) doesn't
detect it.
PR: 294814
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Reviewed by: emaste
Pull Request: https://ron-dev.freebsd.org/FreeBSD/src/pulls/24
| -rw-r--r-- | sys/dev/sound/usb/uaudio.c | 10 | ||||
| -rw-r--r-- | sys/dev/usb/quirk/usb_quirk.c | 1 | ||||
| -rw-r--r-- | sys/dev/usb/usbdevs | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c index 65976ced8a75..f477eb768fde 100644 --- a/sys/dev/sound/usb/uaudio.c +++ b/sys/dev/sound/usb/uaudio.c @@ -713,6 +713,10 @@ static driver_t uaudio_driver = { .size = sizeof(struct uaudio_softc), }; +static const STRUCT_USB_HOST_ID uaudio_vendor_audio[] = { + { USB_VPI(USB_VENDOR_ROLAND, 0x0132, 0) }, /* UA-33 */ +}; + /* The following table is derived from Linux's quirks-table.h */ static const STRUCT_USB_HOST_ID uaudio_vendor_midi[] = { { USB_VPI(USB_VENDOR_YAMAHA, 0x1000, 0) }, /* UX256 */ @@ -868,6 +872,11 @@ uaudio_probe(device_t dev) /* lookup non-standard device(s) */ + if (usbd_lookup_id_by_uaa(uaudio_vendor_audio, + sizeof(uaudio_vendor_audio), uaa) == 0) { + return (BUS_PROBE_SPECIFIC); + } + if (usbd_lookup_id_by_uaa(uaudio_vendor_midi, sizeof(uaudio_vendor_midi), uaa) == 0) { return (BUS_PROBE_SPECIFIC); @@ -6258,4 +6267,5 @@ MODULE_DEPEND(snd_uaudio, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER); MODULE_DEPEND(snd_uaudio, hid, 1, 1, 1); MODULE_VERSION(snd_uaudio, 1); USB_PNP_HOST_INFO(uaudio_devs); +USB_PNP_HOST_INFO(uaudio_vendor_audio); USB_PNP_HOST_INFO(uaudio_vendor_midi); diff --git a/sys/dev/usb/quirk/usb_quirk.c b/sys/dev/usb/quirk/usb_quirk.c index 303f76f37fb0..c1976a59acbe 100644 --- a/sys/dev/usb/quirk/usb_quirk.c +++ b/sys/dev/usb/quirk/usb_quirk.c @@ -565,6 +565,7 @@ static struct usb_quirk_entry usb_quirks[USB_DEV_QUIRKS_MAX] = { USB_QUIRK(CMEDIA, CM6206, UQ_AU_SET_SPDIF_CM6206), USB_QUIRK(PLOYTEC, SPL_CRIMSON_1, UQ_CFG_INDEX_1), USB_QUIRK(ROLAND, UA25EX_AD, UQ_AU_VENDOR_CLASS), + USB_QUIRK(ROLAND, UA33, UQ_AU_VENDOR_CLASS), /* DYMO LabelManager Pnp */ USB_QUIRK(DYMO, LABELMANAGERPNP, UQ_MSC_DYMO_EJECT), diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs index e1394e903cb3..594afafbb07f 100644 --- a/sys/dev/usb/usbdevs +++ b/sys/dev/usb/usbdevs @@ -4208,6 +4208,7 @@ product ROLAND UA700 0x002b UA-700 Audio I/F product ROLAND PCR300 0x0033 EDIROL PCR-300 MIDI I/F product ROLAND UA25EX_AD 0x00e6 EDIROL UA-25EX (Advanced Driver) product ROLAND UA25EX_CC 0x00e7 EDIROL UA-25EX (Class Compliant) +product ROLAND UA33 0x0132 UA-33 Audio I/F /* Rockfire products */ product ROCKFIRE GAMEPAD 0x2033 gamepad 203USB |
