|
@@ -916,3 +916,31 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
|
|
|
mdelay(20);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * snd_usb_interface_dsd_format_quirks() is called from format.c to
|
|
|
+ * augment the PCM format bit-field for DSD types. The UAC standards
|
|
|
+ * don't have a designated bit field to denote DSD-capable interfaces,
|
|
|
+ * hence all hardware that is known to support this format has to be
|
|
|
+ * listed here.
|
|
|
+ */
|
|
|
+u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
|
|
|
+ struct audioformat *fp,
|
|
|
+ unsigned int sample_bytes)
|
|
|
+{
|
|
|
+ /* Playback Designs */
|
|
|
+ if (le16_to_cpu(chip->dev->descriptor.idVendor) == 0x23ba) {
|
|
|
+ switch (fp->altsetting) {
|
|
|
+ case 1:
|
|
|
+ fp->dsd_dop = true;
|
|
|
+ return SNDRV_PCM_FMTBIT_DSD_U16_LE;
|
|
|
+ case 2:
|
|
|
+ fp->dsd_bitrev = true;
|
|
|
+ return SNDRV_PCM_FMTBIT_DSD_U8;
|
|
|
+ case 3:
|
|
|
+ fp->dsd_bitrev = true;
|
|
|
+ return SNDRV_PCM_FMTBIT_DSD_U16_LE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|