HioneOS drivers
Blackjack, our own DAC driver
HiBy's DAC driver sets both CS43198s up from a fixed power-on table about 140 ms before Android tells it the track's rate, and never updates them after, so every track plays at 192 kHz. HiBy is fine with us replacing anything but won't share their source. So we wrote our own.
blackjack_codec.kodrives the two CS43198 DACs. It's built from Cirrus's public datasheet and the mainline Linuxcs43130driver, which already supports the CS43198.blackjack_hooks.kois the platform glue. It hooks into the kernel's audio framework (ASoC:hw_params,startup, the power events), which is where the track's rate is known, so it's where native rate gets set.
It's done clean room. One team studies HiBy's binaries and the device's behavior and writes a plain spec with no code in it. A second team writes the driver from that spec, the datasheet and the mainline source, and never sees HiBy's binaries.
Working Running on the owner's M500 since 2026-10-10, and measured on 2026-10-11.
Measured: Blackjack against HiBy's driver
The 3.5 mm output, measured with Hione into a desktop's onboard Realtek ALC1220 line input at 192 kHz / 32-bit, the player on battery with USB unplugged, 1 kHz at -12 dBFS, volume 100/100. HiBy's driver was measured on 2026-10-10 and Blackjack on 2026-10-11.
| 3.5 mm, 44.1 kHz track | HiBy's driver | Blackjack |
|---|---|---|
| Level at the input, gain high | -9.2 dBFS | -9.2 dBFS |
| THD+N, gain high | -81.1 dB | -81.1 dB |
| Noise, A-weighted | -93.2 dBFS | -93.3 dBFS |
| SNR, A-weighted, gain high | 96.0 dB | 96.0 dB |
| Crosstalk | -91.5 dB | -90.6 dB |
| Gain low: level, THD+N, SNR | -21.2 dBFS, -69.1 dB, 84.1 dB | -21.2 dBFS, -69.0 dB, 84.1 dB |
| DAC rate for a 48 kHz track | 192 kHz | 48 kHz |
| NOS filter at 20 kHz, 48 kHz track | -0.15 dB (all five filters the same) | -2.62 dB |
| NOS filter at 20 kHz, 96 kHz track | -0.15 dB | -0.60 dB |
What the numbers say
Blackjack is as clean as HiBy's driver. The noise, SNR and THD+N figures sit close to the capture card's own limits, so both drivers may well be better than this card can show.
The NOS rows are the proof that native rate is real. A non-oversampling filter droops toward the top of the band by an amount set by the rate the DAC runs at. At a fixed 192 kHz the droop was a tiny -0.15 dB for every track, which is why all five filters looked identical on stock. With Blackjack it's -2.62 dB on a 48 kHz track and -0.60 dB on a 96 kHz track, matching the prediction for a DAC running at the track's rate.
Still to do
- Native 44.1 kHz. 44.1 kHz-family tracks are converted to the 48 kHz family before the DAC. Playing them at their own rate needs a 22.5792 MHz clock.
- The 4.4 mm balanced output. Not measured yet; it needs a balanced-input ADC.
- A better capture card, so the noise figures describe the player instead of the card.
The other drivers
Front light Working
Our clean-room driver for the SGM31324 LED controller has run since 0.4.2. In 0.4.4 the front light shows the playing format's color and pulses with the beat, confirmed on the owner's M500. Stock leaves it stuck on solid blue.
FM tuner Didn't work
Our driver for the Si4705 tuner built, then failed its first hardware test: the chip didn't answer at power-up. It's been pulled, and HiBy's FM driver, with our patch for RDS text, is back in.
The rest Specced
Specs exist for more of the vendor modules, written the same clean-room way. None of them is code yet.
