In contrast to the first two approaches, this one keeps the userspace unaware of the actual transport on the bus.
More specifically, the DSD_U16_LE format may be implemented to actually send DOP samples to the device, depending on the quirks entries.
Also, as there is quite some confusion in both data file formats as well as hardware sample formats about whether to stuff the oldest bit in the MSB or the LSB of a byte, ALSA defines that now to be in the MSB, as far as the ALSA userspace layer is concerned. The driver learned functions to re-encode the bytes according to what the hardware supports.
I also wrote a very basic test tool which I published here:
https://github.com/zonque/alsa-dsd-player
Thanks, Daniel
Daniel Mack (5): ALSA: add DSD formats ALSA: snd-usb: use ep->stride from urb callbacks ALSA: snd-usb: add support for DSD DOP stream transport ALSA: snd-usb: add support for bit-reversed byte formats ALSA: snd-usb: add quirks handler for DSD streams
include/sound/pcm.h | 2 + include/uapi/sound/asound.h | 4 +- sound/core/pcm.c | 2 + sound/core/pcm_misc.c | 8 +++ sound/usb/card.h | 8 +++ sound/usb/endpoint.c | 9 ++++ sound/usb/format.c | 3 ++ sound/usb/pcm.c | 118 ++++++++++++++++++++++++++++++++++++------- sound/usb/quirks.c | 28 ++++++++++ sound/usb/quirks.h | 4 ++ 10 files changed, 167 insertions(+), 19 deletions(-)