Αυτό δεν έχει να κάνει με Linux διανομές και Archphile, Moode κλπ. Τα πράγματα είναι πιο απλά:
1. το DAC να υποστηρίζει native DSD
2. το native DSD mode του DAC να υποστηρίζεται από τον Linux kernel:
https://github.com/torvalds/linux/blob/master/sound/usb/quirks.c
Αν πατε σχετικά προς το τέλος, θα δείτε πως καταχωρίζονται τα dacs στον κώδικα.
Το 2 μπορεί να γίνει και με patch στον kernel, αν γνωρίζουμε κάποια έξτρα στοιχεία για το dac. Μια από τις βασικές προυποθέσεις είναι ο USB receiver να διαφημίζει προς τα έξω ένα διαθέσιμο special altset:
Αυτό μπορέι να διαπιστωθεί εύκολα με την εντολή
Code:
cat /proc/asound/card*/stream0
Αν την τρέξουμε για το USB receiver του DIYINHK πχ, θα δούμε ότι το native dsd έχει οριστέι στο altset 3 που είναι και το special:
Code:
[[email protected] music]# cat /proc/asound/card*/stream0
DIYINHK DIYINHK USB Audio 2.0 at usb-c9100000.usb-1.2.1, high speed : USB Audio
Playback:
Status: Stop
Interface 1
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us
Interface 1
Altset 2
Format: S16_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us
Interface 1
Altset 3
Format: SPECIAL DSD_U32_BE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us
Σε dac που δεν υποστηρίζεται απο τον kernel για native dsd, στο Altset 2 ή 3 de ua δείτε να λέει DSD_U32_BE. Απλά θα πρέπει να υπάρχει ένα Altset που να λέει special.
Με το altset γνωστό, μετά χρειάζεται το id του receiver:
Συνδυάστε όλα αυτά με το λινκ που έδωσα παραπάνω και θα δείτε πως καταχωρίζεται ένα dac στον κώδικα του kernel. Aν πάτε χαμηλά όπως έγραψα και πιο πάνω, μεταξύ άλλων θα δείτε:
Code:
case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */
case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */
case USB_ID(0x20b1, 0x3023): /* Aune X1S 32BIT/384 DSD DAC */
case USB_ID(0x2616, 0x0106): /* PS Audio NuWave DAC */
if (fp->altsetting == 3)
return SNDRV_PCM_FMTBIT_DSD_U32_BE;
break;
Mε λίγα λόγια στο altset 3 έχει καταχωριστέι η συσκευή:
Code:
case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
Που είναι και το receiver του παραδείγματός μου.