Merge tag 'ovl-fixes-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs
[platform/kernel/linux-starfive.git] / sound / usb / quirks.c
index acbeb52..f4b6917 100644 (file)
@@ -851,6 +851,36 @@ static int snd_usb_mbox2_boot_quirk(struct usb_device *dev)
        return 0; /* Successful boot */
 }
 
+static int snd_usb_axefx3_boot_quirk(struct usb_device *dev)
+{
+       int err;
+
+       dev_dbg(&dev->dev, "Waiting for Axe-Fx III to boot up...\n");
+
+       /* If the Axe-Fx III has not fully booted, it will timeout when trying
+        * to enable the audio streaming interface. A more generous timeout is
+        * used here to detect when the Axe-Fx III has finished booting as the
+        * set interface message will be acked once it has
+        */
+       err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
+                               USB_REQ_SET_INTERFACE, USB_RECIP_INTERFACE,
+                               1, 1, NULL, 0, 120000);
+       if (err < 0) {
+               dev_err(&dev->dev,
+                       "failed waiting for Axe-Fx III to boot: %d\n", err);
+               return err;
+       }
+
+       dev_dbg(&dev->dev, "Axe-Fx III is now ready\n");
+
+       err = usb_set_interface(dev, 1, 0);
+       if (err < 0)
+               dev_dbg(&dev->dev,
+                       "error stopping Axe-Fx III interface: %d\n", err);
+
+       return 0;
+}
+
 /*
  * Setup quirks
  */
@@ -1026,6 +1056,8 @@ int snd_usb_apply_boot_quirk(struct usb_device *dev,
                return snd_usb_fasttrackpro_boot_quirk(dev);
        case USB_ID(0x047f, 0xc010): /* Plantronics Gamecom 780 */
                return snd_usb_gamecon780_boot_quirk(dev);
+       case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx 3 */
+               return snd_usb_axefx3_boot_quirk(dev);
        }
 
        return 0;
@@ -1327,20 +1359,47 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
 
        /* XMOS based USB DACs */
        switch (chip->usb_id) {
+       case USB_ID(0x1511, 0x0037): /* AURALiC VEGA */
+       case USB_ID(0x20b1, 0x0002): /* Wyred 4 Sound DAC-2 DSD */
+       case USB_ID(0x20b1, 0x2004): /* Matrix Audio X-SPDIF 2 */
        case USB_ID(0x20b1, 0x3008): /* iFi Audio micro/nano iDSD */
        case USB_ID(0x20b1, 0x2008): /* Matrix Audio X-Sabre */
        case USB_ID(0x20b1, 0x300a): /* Matrix Audio Mini-i Pro */
        case USB_ID(0x22d9, 0x0416): /* OPPO HA-1 */
+       case USB_ID(0x22d9, 0x0436): /* OPPO Sonica */
+       case USB_ID(0x22d9, 0x0461): /* OPPO UDP-205 */
+       case USB_ID(0x2522, 0x0012): /* LH Labs VI DAC Infinity */
+       case USB_ID(0x25ce, 0x001f): /* Mytek Brooklyn DAC */
+       case USB_ID(0x25ce, 0x0021): /* Mytek Manhattan DAC */
+       case USB_ID(0x25ce, 0x8025): /* Mytek Brooklyn DAC+ */
        case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */
                if (fp->altsetting == 2)
                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
                break;
 
+       case USB_ID(0x0d8c, 0x0316): /* Hegel HD12 DSD */
+       case USB_ID(0x16b0, 0x06b2): /* NuPrime DAC-10 */
+       case USB_ID(0x16d0, 0x0733): /* Furutech ADL Stratos */
+       case USB_ID(0x16d0, 0x09db): /* NuPrime Audio DAC-9 */
+       case USB_ID(0x1db5, 0x0003): /* Bryston BDA3 */
        case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */
+       case USB_ID(0x20b1, 0x2005): /* Denafrips Ares DAC */
        case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
        case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */
+       case USB_ID(0x20b1, 0x3021): /* Eastern El. MiniMax Tube DAC Supreme */
        case USB_ID(0x20b1, 0x3023): /* Aune X1S 32BIT/384 DSD DAC */
+       case USB_ID(0x20b1, 0x302d): /* Unison Research Unico CD Due */
+       case USB_ID(0x20b1, 0x3036): /* Holo Springs Level 3 R2R DAC */
+       case USB_ID(0x20b1, 0x307b): /* CH Precision C1 DAC */
+       case USB_ID(0x20b1, 0x3086): /* Singxer F-1 converter board */
+       case USB_ID(0x22d9, 0x0426): /* OPPO HA-2 */
+       case USB_ID(0x22e1, 0xca01): /* HDTA Serenade DSD */
+       case USB_ID(0x249c, 0x9326): /* M2Tech Young MkIII */
        case USB_ID(0x2616, 0x0106): /* PS Audio NuWave DAC */
+       case USB_ID(0x2622, 0x0041): /* Audiolab M-DAC+ */
+       case USB_ID(0x27f7, 0x3002): /* W4S DAC-2v2SE */
+       case USB_ID(0x29a2, 0x0086): /* Mutec MC3+ USB */
+       case USB_ID(0x6b42, 0x0042): /* MSB Technology */
                if (fp->altsetting == 3)
                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
                break;