Não existe um padrão que permita ao driver detectar dispositivos DSD. Cada dispositivo deve ser listado em o driver , e até agora ninguém sabia sobre o "mDSD".
A única maneira de fazer o mDSD funcionar é recompilar o driver.
Estou usando o Ubuntu 16.04.3 com o kernel 4.4.0-113.
Eu tenho duas placas de som USB baseadas em XMOS diferentes, uma funciona perfeitamente e reproduz arquivos DSD conforme o esperado. O outro funciona, mas não é reconhecido como um dispositivo XMOS, portanto, um driver abaixo do ideal é carregado para ele.
Como posso alterá-lo para que o mesmo driver seja carregado e usado para os dois dispositivos?
lsusb para os dois dispositivos:
O cartão com o driver desejado:
Bus 003 Device 007: ID 20b1:000a XMOS Ltd
A placa com o driver menos ideal:
Bus 001 Device 003: ID 16d0:09dd MCS
Saída do asound:
Cartão com driver adequado:
card 4: x20 [xCORE USB Audio 2.0], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
Cartão com driver impróprio:
card 3: mDSD [Encore mDSD], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
Editar para documentar a solução:
Seguindo este guia , eu fiz o download do código fonte do kernel, modifiquei e compilei.
Eu adicionei o ID do fornecedor e do dispositivo da saída lsusb à seção relevante na origem do kernel
../sound/usb/quirks.c
Especificamente, uma linha para o mDSD do Encore:
case USB_ID(0x16d0, 0x09dd): /* Encore mDSD */
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;
Depois eu compilei o driver, instalei, reiniciei e a placa funciona perfeitamente com o DSD nativo até o DSD256.
Não existe um padrão que permita ao driver detectar dispositivos DSD. Cada dispositivo deve ser listado em o driver , e até agora ninguém sabia sobre o "mDSD".
A única maneira de fazer o mDSD funcionar é recompilar o driver.