I made a Linux kernel driver for the Topping DX5 II which I've published on Github at tcreswick/topping-dx5ii-linux.
The driver supports:
It's based on about an hour of reverse engineering the Topping USB HID protocol - documentation for that is now included in the Github repo too, if you want to roll your own implementation.
Feedback welcome!
The amixer output is here, if you want the details on all the 'knobs':
NB: I wasn't able to figure out how to 'poll' the current status of the device, so at initial startup the driver can be out of sync with the DAC (i.e. it has no way of knowing what the current input, output, PEQ and volume settings are until they are changed). I'm working on this.
The driver supports:
- Mute / Unmute
- Setting volume as real ALSA controls (%age, dB etc)
- Input selection
- Output selection
- PEQ enable/disable
- PCM filter selection
- High/Low gain select
- The operating system volume slider adjusts volume on the DAC, and vice-versa
- No more setting the OS volume to 100% and leaning over to make a change on the DAC
- This means easy volume changes using your keyboard keys, and mute key
- Programmatically change inputs and outputs from the command line (if you want to automate)
It's based on about an hour of reverse engineering the Topping USB HID protocol - documentation for that is now included in the Github repo too, if you want to roll your own implementation.
Feedback welcome!
The amixer output is here, if you want the details on all the 'knobs':
Code:
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 198
Mono: Playback 114 [58%] [-42.00dB] [on]
Simple mixer control 'PCM Filter',0
Capabilities: enum
Items: 'F-1 Minimum Phase' 'F-2 Linear Phase Fast Roll-Off Apodizing' 'F-3 Linear Phase Fast Roll-Off' 'F-4 Linear Phase Fast Roll-Off Low Ripple' 'F-5 Linear Phase Slow Roll-Off' 'F-6 Minimum Phase Fast Roll-Off' 'F-7 Minimum Phase Slow Roll-Off' 'F-8 Minimum Phase Slow Roll-Off Low Dispersion'
Item0: 'F-1 Minimum Phase'
Simple mixer control 'Gain',0
Capabilities: enum
Items: 'Low' 'High'
Item0: 'Low'
Simple mixer control 'Input Source',0
Capabilities: cenum
Items: 'USB' 'Optical' 'Coaxial' 'Bluetooth'
Item0: 'USB'
Simple mixer control 'Output Mode',0
Capabilities: enum
Items: 'ALL' 'HPA ALL' 'LO ALL' 'HPA SE' 'HPA BAL' 'LO SE'
Item0: 'ALL'
Simple mixer control 'PEQ',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]
NB: I wasn't able to figure out how to 'poll' the current status of the device, so at initial startup the driver can be out of sync with the DAC (i.e. it has no way of knowing what the current input, output, PEQ and volume settings are until they are changed). I'm working on this.