[PATCH] ALSA: usb-audio: Skip probe of UA-101 devices
UA-101 device and co are supported by another driver, snd-ua101, but the USB audio class driver (snd-usb-audio) catches all and this resulted in the lack of functionality like missing MIDI devices.
This patch introduces a sort of deny-listing for those devices to just return -ENODEV at probe in snd-usb-audio driver, so that it falls back to the probe by snd-ua101.
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=212477 Signed-off-by: Takashi Iwai tiwai@suse.de --- sound/usb/card.c | 2 ++ sound/usb/quirks-table.h | 21 +++++++++++++++++++++ sound/usb/usbaudio.h | 1 + 3 files changed, 24 insertions(+)
diff --git a/sound/usb/card.c b/sound/usb/card.c index b6f4c0848e66..a482287a2d7f 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -715,6 +715,8 @@ static int usb_audio_probe(struct usb_interface *intf, quirk = get_alias_quirk(dev, id); if (quirk && quirk->ifnum >= 0 && ifnum != quirk->ifnum) return -ENXIO; + if (quirk && quirk->ifnum == QUIRK_NODEV_INTERFACE) + return -ENODEV;
err = snd_usb_apply_boot_quirk(dev, intf, quirk, id); if (err < 0) diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index 1165a5ac60f2..1f555d7b7752 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -1674,6 +1674,27 @@ YAMAHA_DEVICE(0x7010, "UB99"), } } }, + +/* UA101 and co are supported by another driver */ +{ + USB_DEVICE(0x0582, 0x0044), /* UA-1000 high speed */ + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { + .ifnum = QUIRK_NODEV_INTERFACE + }, +}, +{ + USB_DEVICE(0x0582, 0x007d), /* UA-101 high speed */ + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { + .ifnum = QUIRK_NODEV_INTERFACE + }, +}, +{ + USB_DEVICE(0x0582, 0x008d), /* UA-101 full speed */ + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { + .ifnum = QUIRK_NODEV_INTERFACE + }, +}, + /* this catches most recent vendor-specific Roland devices */ { .match_flags = USB_DEVICE_ID_MATCH_VENDOR | diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h index 60b9dd7df6bb..7f91ec1c5646 100644 --- a/sound/usb/usbaudio.h +++ b/sound/usb/usbaudio.h @@ -75,6 +75,7 @@ struct snd_usb_audio { */
/* special values for .ifnum */ +#define QUIRK_NODEV_INTERFACE -3 /* return -ENODEV */ #define QUIRK_NO_INTERFACE -2 #define QUIRK_ANY_INTERFACE -1
participants (1)
-
Takashi Iwai