В Ср, 07/08/2019 в 19:30 +0200, thomas rost пишет:
Hello,
can anybody help me get the 'class compliant' motu microbook iic to run?
this is my alsa-info.sh output:
http://alsa-project.org/db/?f=0fd9a8df7bae3400d83b6af8b75c45aa0760d84d
thanks in advance.
thomas
Hello, Thomas!
Could you test the patch below? It should apply cleanly on 5.4.22 and newer.
There are still issues with usb descriptors and clock validity checks, so the card is quite noisy in the kernel logs.
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index bd258f1ec2dd..04ccc7d80671 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -358,9 +358,13 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs, ifnum = 1; goto add_sync_ep_from_ifnum; case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook II */ - ep = 0x84; - ifnum = 0; - goto add_sync_ep_from_ifnum; + if (altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC) { + ep = 0x84; + ifnum = 0; + goto add_sync_ep_from_ifnum; + } + /* else MicroBook IIc */ + return 0; case USB_ID(0x07fd, 0x0008): /* MOTU M Series */ ep = 0x81; ifnum = 2; diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index d187aa6d50db..1c8719292eee 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -3472,7 +3472,7 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"), }, /* MOTU Microbook II */ { - USB_DEVICE(0x07fd, 0x0004), + USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004), .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { .vendor_name = "MOTU", .product_name = "MicroBookII", diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index 7f558f4b4520..369e5163e9c9 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1113,6 +1113,12 @@ static int snd_usb_motu_microbookii_boot_quirk(struct usb_device *dev) return err; }
+static int snd_usb_motu_microbookiic_boot_quirk(struct usb_device *dev) +{ + msleep(3000); + return 0; +} + static int snd_usb_motu_m_series_boot_quirk(struct usb_device *dev) { int ret; @@ -1316,7 +1322,11 @@ int snd_usb_apply_boot_quirk(struct usb_device *dev, case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx 3 */ return snd_usb_axefx3_boot_quirk(dev); case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook II */ - return snd_usb_motu_microbookii_boot_quirk(dev); + if (get_iface_desc(intf->altsetting)->bInterfaceClass == + USB_CLASS_VENDOR_SPEC && + get_iface_desc(intf->altsetting)->bInterfaceNumber < 3) + return snd_usb_motu_microbookii_boot_quirk(dev); + break; }
return 0; @@ -1328,6 +1338,11 @@ int snd_usb_apply_boot_quirk_once(struct usb_device *dev, unsigned int id) { switch (id) { + case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook IIc */ + if (get_iface_desc(intf->altsetting)->bInterfaceClass == + USB_CLASS_AUDIO) + return snd_usb_motu_microbookiic_boot_quirk(dev); + break; case USB_ID(0x07fd, 0x0008): /* MOTU M Series */ return snd_usb_motu_m_series_boot_quirk(dev); } @@ -1754,5 +1769,12 @@ void snd_usb_audioformat_attributes_quirk(struct snd_usb_audio *chip, else fp->ep_attr |= USB_ENDPOINT_SYNC_SYNC; break; + case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook IIc */ + /* + * Due to an error in descriptors this card produces only + * noise on sample rates other than 96KHz + */ + fp->attributes &= ~UAC_EP_CS_ATTR_FILL_MAX; + break; } }