Native DSD on a Mission 778x integrated DAC/amplifier: supported or not?

Hi,
I have a Mission 778x integrated DAC/amplifier:
https://www.mission.co.uk/778x/
Its datasheet advertises up to DSD256 and 384 kHz but I was unable to verify direct native DSD support.
DoP works up to DSD128, probably limited by 384 kHz frequency rate.
In the details, I have:

$ cat /proc/asound/M20/stream0
MISSION MISSION USB Audio 2.0 at usb-0000:01:00.0-1.2, high speed : USB Audio

Playback:
  Status: Stop
  Interface 1
    Altset 1
    Format: S32_LE
    Channels: 2
    Endpoint: 0x01 (1 OUT) (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 125 us
    Bits: 24
    Channel map: FL FR
    Sync Endpoint: 0x81 (1 IN)
    Sync EP Interface: 1
    Sync EP Altset: 1
    Implicit Feedback Mode: No
  Interface 1
    Altset 2
    Format: S16_LE
    Channels: 2
    Endpoint: 0x01 (1 OUT) (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 125 us
    Bits: 16
    Channel map: FL FR
    Sync Endpoint: 0x81 (1 IN)
    Sync EP Interface: 1
    Sync EP Altset: 2
    Implicit Feedback Mode: No
  Interface 1
    Altset 3
    Format: SPECIAL
    Channels: 2
    Endpoint: 0x01 (1 OUT) (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 125 us
    Bits: 32
    DSD raw: DOP=0, bitrev=0
    Channel map: FL FR
    Sync Endpoint: 0x81 (1 IN)
    Sync EP Interface: 1
    Sync EP Altset: 3
    Implicit Feedback Mode: No

As you can see, there is an Altset3 with SPECIAL capabilities and “DSD raw: DOP=0, bitrev=0” (what does it mean???). I haven’t any DSD_* .
Also:

aplay --dump-hw-params -D hw:0,0 -f cd /dev/zero
Playing raw data '/dev/zero' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
HW Params of device "hw:0,0":
--------------------
ACCESS:  MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT:  S16_LE S32_LE SPECIAL
SUBFORMAT:  STD
SAMPLE_BITS: [16 32]
FRAME_BITS: [32 64]
CHANNELS: 2
RATE: [44100 384000]
PERIOD_TIME: [125 1000000]
PERIOD_SIZE: [8 384000]
PERIOD_BYTES: [64 3072000]
PERIODS: [2 1024]
BUFFER_TIME: (41 2000000]
BUFFER_SIZE: [16 768000]
BUFFER_BYTES: [64 6144000]
TICK_TIME: ALL
--------------------

Vendor offers only a Windows driver and doesn’t respond to any contact attempt.
I’d like to know if:

  • amplifier really supports native DSD up to DSD256 or not
  • only Linux kernel support for this DAC is missing (Raspberry Pi 4 platform)

Thanks in advance.

Your current information does not show that DSD is supported on linux.
We need a vendor-d:product-id string (example 0x16d0:0x071a) to verify the linux usb audio driver.
Use lsusb while the DAC is connected and post your output here.

Note: Volumio only uses vendor-delivered kernels for standard RPi and Tinkerboard based boards.
Volumio only supports DSD additions for its own line of products, for which Volumio maintains its own kernel version.
So when your vendor:product id is not registered in the driver of current RPi delivered kernel, Volumio can’t help.

Hi,
a more recent kernel (6.6) reports :

# lsusb
...
Bus 001 Device 004: ID 2622:0011 MISSION  MISSION USB Audio 2.0
...

The device with vendor id 2622 has not been registered in the usb audio driver, therefore you will have no support until the supplier gets this done for the standard RPi.

Alternative options are

  • you are running Volumio on x86
  • you have a Volumio Streamer like Rivo, Primo 2, Integro or Motivo

In these cases you can request support for 2622:0011.

I will try Volumio on x86 and look at your wonderful hw products!
Thanks

x86 does not support the DAC yet, but it can be added on request!

From my attempts, it seems that adding this:
case USB_ID(0x2622, 0x0011): /* Mission 778X */
to sound/usb/quirks.c (in kernel sources) is enough to make DAC supported with DSD_U32_BE.

Obviously, I tried on a Raspberry 4 and its arm64 kernel.

Spot on, that is the necessary patch.
@darmur, could you take care of the Volumio products, I’ll add it to my x86 kernel build patches.

@mimmus This will be done, but can take a while. For x86 I plan to add it next week, but I have no influence on a next Volumio release.

Just to add an useful info for others, before resorting to re-compile kernel module…

“snd_usb_audio” module supports this parameter:

quirk_alias
  Quirk alias list, pass strings like 0123abcd:5678beef, which applies the existing quirk for the device 5678:beef to a new device 0123:abcd

(only for testing / development. If you want to have a proper support, contact to upstream for adding the matching quirk in the driver code statically. Ditto for quirk_flags. If a device is known to require specific workarounds, please report to the upstream)

Then I executed:
# modprobe -r snd_usb_audio
# modprobe snd_usb_audio quirk_alias=26220011:26220041
(just tried with a similar DAC already in quirks.c)
and it works.

yes, you can even put it on the kernel cmdline:

snd-usb-audio.quirk_alias=12344321:26220011