[alsa-devel] [PATCH] add native DSD support for XMOS based DACs.
Add quirk for XMOS based DACs for native DSD playback support using the new DSD_U32_LE sample format. Works for all DAC vendors which use XMOS as idVendor. E.g. iFi Audio with their micro iDSD and nano iDSD.
Signed-off-by: Jurgen Kramer gtmkramer@xs4all.nl --- sound/usb/quirks.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index 19a921e..e0efffb 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1174,5 +1174,15 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, } }
+ /* XMOS based DACs, e.g. iFi Audio micro/nano iDSD */ + if (le16_to_cpu(chip->dev->descriptor.idVendor) == 0x20b1) { + switch (fp->altsetting) { + case 2: + return SNDRV_PCM_FMTBIT_DSD_U32_LE; + default: + return 0; + } + } + return 0; }
Jurgen Kramer wrote:
Add quirk for XMOS based DACs for native DSD playback support using the new DSD_U32_LE sample format. Works for all DAC vendors which use XMOS as idVendor. E.g. iFi Audio with their micro iDSD and nano iDSD.
+++ b/sound/usb/quirks.c
- /* XMOS based DACs, e.g. iFi Audio micro/nano iDSD */
- if (le16_to_cpu(chip->dev->descriptor.idVendor) == 0x20b1) {
switch (fp->altsetting) {
case 2:
return SNDRV_PCM_FMTBIT_DSD_U32_LE;
Can you confirm that all XMOS devices ever built will have DSD on that alternate setting?
Regards, Clemens
On Fri, 2014-09-05 at 11:36 +0200, Clemens Ladisch wrote:
Jurgen Kramer wrote:
Add quirk for XMOS based DACs for native DSD playback support using the new DSD_U32_LE sample format. Works for all DAC vendors which use XMOS as idVendor. E.g. iFi Audio with their micro iDSD and nano iDSD.
+++ b/sound/usb/quirks.c
- /* XMOS based DACs, e.g. iFi Audio micro/nano iDSD */
- if (le16_to_cpu(chip->dev->descriptor.idVendor) == 0x20b1) {
switch (fp->altsetting) {
case 2:
return SNDRV_PCM_FMTBIT_DSD_U32_LE;
Can you confirm that all XMOS devices ever built will have DSD on that alternate setting?
No, I can not. Most newer implementations will use alt setting 2 for native DSD support. My first version also used idProduct to only target iFi devices. If this is required, I'll rework my patch.
Regards, Jurgen
Jurgen Kramer wrote:
On Fri, 2014-09-05 at 11:36 +0200, Clemens Ladisch wrote:
Jurgen Kramer wrote:
Add quirk for XMOS based DACs for native DSD playback support using the new DSD_U32_LE sample format. Works for all DAC vendors which use XMOS as idVendor. E.g. iFi Audio with their micro iDSD and nano iDSD.
+++ b/sound/usb/quirks.c
- /* XMOS based DACs, e.g. iFi Audio micro/nano iDSD */
- if (le16_to_cpu(chip->dev->descriptor.idVendor) == 0x20b1) {
switch (fp->altsetting) {
case 2:
return SNDRV_PCM_FMTBIT_DSD_U32_LE;
Can you confirm that all XMOS devices ever built will have DSD on that alternate setting?
No, I can not. Most newer implementations will use alt setting 2 for native DSD support.
But it's possible to have other XMOS-based devices that use multiple alternate settings for PCM.
My first version also used idProduct to only target iFi devices. If this is required, I'll rework my patch.
I guess there isn't any property of the descriptors to distinguish DoP from PCM? How does the generic Windows driver know which alternate settings are DoP?
Regards, Clemens
On Fri, 2014-09-05 at 12:29 +0200, Clemens Ladisch wrote:
Jurgen Kramer wrote:
On Fri, 2014-09-05 at 11:36 +0200, Clemens Ladisch wrote:
Jurgen Kramer wrote:
Add quirk for XMOS based DACs for native DSD playback support using the new DSD_U32_LE sample format. Works for all DAC vendors which use XMOS as idVendor. E.g. iFi Audio with their micro iDSD and nano iDSD.
+++ b/sound/usb/quirks.c
- /* XMOS based DACs, e.g. iFi Audio micro/nano iDSD */
- if (le16_to_cpu(chip->dev->descriptor.idVendor) == 0x20b1) {
switch (fp->altsetting) {
case 2:
return SNDRV_PCM_FMTBIT_DSD_U32_LE;
Can you confirm that all XMOS devices ever built will have DSD on that alternate setting?
No, I can not. Most newer implementations will use alt setting 2 for native DSD support.
But it's possible to have other XMOS-based devices that use multiple alternate settings for PCM.
Correct. So it will be better to make the quirks vendor/device specific. Downside being that each device has be added. I'll rework my patch.
My first version also used idProduct to only target iFi devices. If this is required, I'll rework my patch.
I guess there isn't any property of the descriptors to distinguish DoP from PCM? How does the generic Windows driver know which alternate settings are DoP?
Indeed. Unfortunately DoP support is not exposed in any way. That is why the quirks mechanism was added to the kernel. Windows still does not support UAC2 out of the box. For XMOS based devices support comes through the commercial Thesycon driver. Each vendor uses a tailored version specific for their devices.
Native DSD support on Windows works through Steinbergs ASIO 2.1/2.2 driver. This has to be supported by the Windows UAC2 driver.
Regards, Jurgen
participants (2)
-
Clemens Ladisch
-
Jurgen Kramer