diff options
Diffstat (limited to 'sound/usb/quirks.c')
-rw-r--r-- | sound/usb/quirks.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index acbeb52f6fd6..f4b69173682c 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c | |||
@@ -851,6 +851,36 @@ static int snd_usb_mbox2_boot_quirk(struct usb_device *dev) | |||
851 | return 0; /* Successful boot */ | 851 | return 0; /* Successful boot */ |
852 | } | 852 | } |
853 | 853 | ||
854 | static int snd_usb_axefx3_boot_quirk(struct usb_device *dev) | ||
855 | { | ||
856 | int err; | ||
857 | |||
858 | dev_dbg(&dev->dev, "Waiting for Axe-Fx III to boot up...\n"); | ||
859 | |||
860 | /* If the Axe-Fx III has not fully booted, it will timeout when trying | ||
861 | * to enable the audio streaming interface. A more generous timeout is | ||
862 | * used here to detect when the Axe-Fx III has finished booting as the | ||
863 | * set interface message will be acked once it has | ||
864 | */ | ||
865 | err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), | ||
866 | USB_REQ_SET_INTERFACE, USB_RECIP_INTERFACE, | ||
867 | 1, 1, NULL, 0, 120000); | ||
868 | if (err < 0) { | ||
869 | dev_err(&dev->dev, | ||
870 | "failed waiting for Axe-Fx III to boot: %d\n", err); | ||
871 | return err; | ||
872 | } | ||
873 | |||
874 | dev_dbg(&dev->dev, "Axe-Fx III is now ready\n"); | ||
875 | |||
876 | err = usb_set_interface(dev, 1, 0); | ||
877 | if (err < 0) | ||
878 | dev_dbg(&dev->dev, | ||
879 | "error stopping Axe-Fx III interface: %d\n", err); | ||
880 | |||
881 | return 0; | ||
882 | } | ||
883 | |||
854 | /* | 884 | /* |
855 | * Setup quirks | 885 | * Setup quirks |
856 | */ | 886 | */ |
@@ -1026,6 +1056,8 @@ int snd_usb_apply_boot_quirk(struct usb_device *dev, | |||
1026 | return snd_usb_fasttrackpro_boot_quirk(dev); | 1056 | return snd_usb_fasttrackpro_boot_quirk(dev); |
1027 | case USB_ID(0x047f, 0xc010): /* Plantronics Gamecom 780 */ | 1057 | case USB_ID(0x047f, 0xc010): /* Plantronics Gamecom 780 */ |
1028 | return snd_usb_gamecon780_boot_quirk(dev); | 1058 | return snd_usb_gamecon780_boot_quirk(dev); |
1059 | case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx 3 */ | ||
1060 | return snd_usb_axefx3_boot_quirk(dev); | ||
1029 | } | 1061 | } |
1030 | 1062 | ||
1031 | return 0; | 1063 | return 0; |
@@ -1327,20 +1359,47 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, | |||
1327 | 1359 | ||
1328 | /* XMOS based USB DACs */ | 1360 | /* XMOS based USB DACs */ |
1329 | switch (chip->usb_id) { | 1361 | switch (chip->usb_id) { |
1362 | case USB_ID(0x1511, 0x0037): /* AURALiC VEGA */ | ||
1363 | case USB_ID(0x20b1, 0x0002): /* Wyred 4 Sound DAC-2 DSD */ | ||
1364 | case USB_ID(0x20b1, 0x2004): /* Matrix Audio X-SPDIF 2 */ | ||
1330 | case USB_ID(0x20b1, 0x3008): /* iFi Audio micro/nano iDSD */ | 1365 | case USB_ID(0x20b1, 0x3008): /* iFi Audio micro/nano iDSD */ |
1331 | case USB_ID(0x20b1, 0x2008): /* Matrix Audio X-Sabre */ | 1366 | case USB_ID(0x20b1, 0x2008): /* Matrix Audio X-Sabre */ |
1332 | case USB_ID(0x20b1, 0x300a): /* Matrix Audio Mini-i Pro */ | 1367 | case USB_ID(0x20b1, 0x300a): /* Matrix Audio Mini-i Pro */ |
1333 | case USB_ID(0x22d9, 0x0416): /* OPPO HA-1 */ | 1368 | case USB_ID(0x22d9, 0x0416): /* OPPO HA-1 */ |
1369 | case USB_ID(0x22d9, 0x0436): /* OPPO Sonica */ | ||
1370 | case USB_ID(0x22d9, 0x0461): /* OPPO UDP-205 */ | ||
1371 | case USB_ID(0x2522, 0x0012): /* LH Labs VI DAC Infinity */ | ||
1372 | case USB_ID(0x25ce, 0x001f): /* Mytek Brooklyn DAC */ | ||
1373 | case USB_ID(0x25ce, 0x0021): /* Mytek Manhattan DAC */ | ||
1374 | case USB_ID(0x25ce, 0x8025): /* Mytek Brooklyn DAC+ */ | ||
1334 | case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */ | 1375 | case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */ |
1335 | if (fp->altsetting == 2) | 1376 | if (fp->altsetting == 2) |
1336 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; | 1377 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; |
1337 | break; | 1378 | break; |
1338 | 1379 | ||
1380 | case USB_ID(0x0d8c, 0x0316): /* Hegel HD12 DSD */ | ||
1381 | case USB_ID(0x16b0, 0x06b2): /* NuPrime DAC-10 */ | ||
1382 | case USB_ID(0x16d0, 0x0733): /* Furutech ADL Stratos */ | ||
1383 | case USB_ID(0x16d0, 0x09db): /* NuPrime Audio DAC-9 */ | ||
1384 | case USB_ID(0x1db5, 0x0003): /* Bryston BDA3 */ | ||
1339 | case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */ | 1385 | case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */ |
1386 | case USB_ID(0x20b1, 0x2005): /* Denafrips Ares DAC */ | ||
1340 | case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */ | 1387 | case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */ |
1341 | case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */ | 1388 | case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */ |
1389 | case USB_ID(0x20b1, 0x3021): /* Eastern El. MiniMax Tube DAC Supreme */ | ||
1342 | case USB_ID(0x20b1, 0x3023): /* Aune X1S 32BIT/384 DSD DAC */ | 1390 | case USB_ID(0x20b1, 0x3023): /* Aune X1S 32BIT/384 DSD DAC */ |
1391 | case USB_ID(0x20b1, 0x302d): /* Unison Research Unico CD Due */ | ||
1392 | case USB_ID(0x20b1, 0x3036): /* Holo Springs Level 3 R2R DAC */ | ||
1393 | case USB_ID(0x20b1, 0x307b): /* CH Precision C1 DAC */ | ||
1394 | case USB_ID(0x20b1, 0x3086): /* Singxer F-1 converter board */ | ||
1395 | case USB_ID(0x22d9, 0x0426): /* OPPO HA-2 */ | ||
1396 | case USB_ID(0x22e1, 0xca01): /* HDTA Serenade DSD */ | ||
1397 | case USB_ID(0x249c, 0x9326): /* M2Tech Young MkIII */ | ||
1343 | case USB_ID(0x2616, 0x0106): /* PS Audio NuWave DAC */ | 1398 | case USB_ID(0x2616, 0x0106): /* PS Audio NuWave DAC */ |
1399 | case USB_ID(0x2622, 0x0041): /* Audiolab M-DAC+ */ | ||
1400 | case USB_ID(0x27f7, 0x3002): /* W4S DAC-2v2SE */ | ||
1401 | case USB_ID(0x29a2, 0x0086): /* Mutec MC3+ USB */ | ||
1402 | case USB_ID(0x6b42, 0x0042): /* MSB Technology */ | ||
1344 | if (fp->altsetting == 3) | 1403 | if (fp->altsetting == 3) |
1345 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; | 1404 | return SNDRV_PCM_FMTBIT_DSD_U32_BE; |
1346 | break; | 1405 | break; |