HioneOS

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.ko drives the two CS43198 DACs. It's built from Cirrus's public datasheet and the mainline Linux cs43130 driver, which already supports the CS43198.
  • blackjack_hooks.ko is 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.

Bender: Yeah, well, I'm gonna go build my own audio driver. With blackjack and hook(er)s! In fact, forget the driver!
The platform module is the part that registers the hooks, so it's the hook-er. Futurama and Bender belong to their owners. Fan meme, not an endorsement.

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 trackHiBy's driverBlackjack
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 high96.0 dB96.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 track192 kHz48 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.
On HiBy's driver, all five digital filters overlap in the top octave
HiBy's driver: the five filters on top of each other, because the DAC always ran at 192 kHz.
Impulse response on HiBy's driver, identical in every filter mode
HiBy's driver: the same impulse response in every mode.
THD+N for all 24 modes on HiBy's driver
HiBy's driver: THD+N for all 24 modes.

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.