]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - sound/usb/quirks.c
Merge tag 'riscv-for-linus-5.6-mw0' of git://git.kernel.org/pub/scm/linux/kernel...
[linux.git] / sound / usb / quirks.c
index 82184036437b50d203e9d1581b35cd760cd63bda..3a5242e383b24ad21652f98aa3396567417043ca 100644 (file)
@@ -1113,6 +1113,31 @@ static int snd_usb_motu_microbookii_boot_quirk(struct usb_device *dev)
        return err;
 }
 
+static int snd_usb_motu_m_series_boot_quirk(struct usb_device *dev)
+{
+       int ret;
+
+       if (snd_usb_pipe_sanity_check(dev, usb_sndctrlpipe(dev, 0)))
+               return -EINVAL;
+       ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
+                             1, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+                             0x0, 0, NULL, 0, 1000);
+
+       if (ret < 0)
+               return ret;
+
+       msleep(2000);
+
+       ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
+                             1, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+                             0x20, 0, NULL, 0, 1000);
+
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
 /*
  * Setup quirks
  */
@@ -1297,6 +1322,19 @@ int snd_usb_apply_boot_quirk(struct usb_device *dev,
        return 0;
 }
 
+int snd_usb_apply_boot_quirk_once(struct usb_device *dev,
+                                 struct usb_interface *intf,
+                                 const struct snd_usb_audio_quirk *quirk,
+                                 unsigned int id)
+{
+       switch (id) {
+       case USB_ID(0x07fd, 0x0008): /* MOTU M Series */
+               return snd_usb_motu_m_series_boot_quirk(dev);
+       }
+
+       return 0;
+}
+
 /*
  * check if the device uses big-endian samples
  */
@@ -1393,22 +1431,22 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
 {
        /* devices which do not support reading the sample rate. */
        switch (chip->usb_id) {
-       case USB_ID(0x041E, 0x4080): /* Creative Live Cam VF0610 */
-       case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
+       case USB_ID(0x041e, 0x4080): /* Creative Live Cam VF0610 */
+       case USB_ID(0x04d8, 0xfeea): /* Benchmark DAC1 Pre */
        case USB_ID(0x0556, 0x0014): /* Phoenix Audio TMX320VC */
-       case USB_ID(0x05A3, 0x9420): /* ELP HD USB Camera */
+       case USB_ID(0x05a3, 0x9420): /* ELP HD USB Camera */
        case USB_ID(0x05a7, 0x1020): /* Bose Companion 5 */
-       case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
+       case USB_ID(0x074d, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
        case USB_ID(0x1395, 0x740a): /* Sennheiser DECT */
        case USB_ID(0x1901, 0x0191): /* GE B850V3 CP2114 audio interface */
-       case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
+       case USB_ID(0x21b4, 0x0081): /* AudioQuest DragonFly */
                return true;
        }
 
        /* devices of these vendors don't support reading rate, either */
        switch (USB_ID_VENDOR(chip->usb_id)) {
-       case 0x045E: /* MS Lifecam */
-       case 0x047F: /* Plantronics */
+       case 0x045e: /* MS Lifecam */
+       case 0x047f: /* Plantronics */
        case 0x1de7: /* Phoenix Audio */
                return true;
        }