Skip to content

← Firmware Downloads

Post-install setup · Reborn (Y2Linux) · Y2

Y2 Platform 1.0 wired PCM precision completion pass

Debian-based Linux with a fast clickwheel interface for the Innioasis Y2.

Instructions published by the project, shown here word for word.

Y2 Platform 1.0 wired PCM precision completion pass

Wired-precision correction: the current evidence record withdraws the HARDWARE_PROVEN_UNSUPPORTED conclusion. MON0 defines16-bit monitor fields; an absolute silicon transport ceiling does not follow from that alone. Installed S16 and software24 preservation remain validated; wider hardware feasibility is open. No native24/32 qualification is claimed.

2026-10-04. Verdict: MORE_HARDWARE_EVIDENCE_REQUIRED. Highest admitted complete native path: **S16_LE, 16 meaningful bits, stereo, 44.1/48 kHz**. This is not a proved MT6582 silicon ceiling. No native S24/S32 format mask or unverified register programming was added.

Sources start at Linux b5aea93 and Reborn b71b468, in separate codex/platform-v1-highres-audio worktrees. Main worktrees, other branches, Git identities and authenticated account are preserved. No merge, push or flash. See the admission audit.

Evidence vocabulary and result

ClassificationResult
PROVENExact current source contract, vendor register definitions, stock width-function stubs, CS43131 receiver capabilities. No proof of a wider MT6582 fetch/interconnect contract.
IMPLEMENTEDKernel precision contract, platform diagnostics/export, packed24 constraint query, stronger 24/32 fixtures, saturating ties-even membrane integer narrowing, reproducible decode/DSP/packing CPU benchmark. Existing post-conversion live gain remains a separate quantization stage. Native wider modes remain disabled.
SOFTWARE_VALIDATEDReal decode/DSP/packing low24 bits, full32 loss detection, quantization boundaries, host/ARM/QEMU, kernel/config/DT/module ABI and packaging source checks.
PHYSICALLY_OBSERVEDLocked Baseline02 identity, taint 0, direct constraint intersections, idle AFE register snapshot and suspended runtime PM. Prior bounded S16 headphone results remain valid for their artifacts. Fresh playback and CPU measurements: NOT_RUN because the device lock remained occupied.
REQUIRES_EXTERNAL_CAPTUREMeaningful wire payload/alignment/padding, measured serial clocks, independent DAC input bit proof. A verified MT6582 wider fetch/interconnect configuration is additionally required before a wider capture can be attempted.

Exact current sample path

For the deterministic stereo 24-bit WAV/FLAC source at 44.1 or 48 kHz:

source: signed PCM24 L/R (WAV: 3 little-endian bytes/sample, 6 bytes/frame)
  -> FFmpeg decoder AVFrame: AV_SAMPLE_FMT_S32, native little-endian Q31
     PCM24 occupies bits31:8; bits7:0 zero; stereo interleaved 8 bytes/frame
     decoder precision is 24 meaningful source bits, not 32 because of S32
  -> canonical_swr: stereo AV_SAMPLE_FMT_FLTP, same source rate
     channel layout stereo, separate L/R planes, stride 4 bytes/sample/plane
     signed Q31 / 2^31; binary32 has a 24-bit significand
  -> FFmpeg graph: FLTP -> ReplayGain/headroom -> optional EQ
     -> alimiter(limit=.98, latency compensation, no automatic level gain)
     -> FLTP sink; individual filters may internally negotiate another float type
     Playback::begin_start_with_gapless forces decoder user volume100; standalone
     and benchmark callers can apply their configured volume inside this graph
  -> output_swr: stereo, negotiated sink rate; same rate for these fixtures
     ordinary native sink: float -> signed S16 (scale 2^15, round, saturate)
     interleaved little-endian L/R; 2 bytes/sample, 4 bytes/frame
     crossfade: temporary S32 Q31 -> float acrossfade -> S32 -> final S16
     final integer narrowing now uses nearest/ties-even and saturation
  -> Rust byte queue (no conversion while enqueuing)
  -> live VolumeRamp immediately before ALSA: <=512 stereo frames/render
     user gain=(min(volume,100)/100)^2, f64, five-ms ramp (220/240 frames)
     S16 LE -> f64 multiply -> round nearest, ties away from zero
     -> clamp[-32768,32767] -> S16 LE; same 4-byte stereo frame stride
     settled unity gain copies bytes exactly; settled zero gain emits exact silence
     gain.advance(n) and byte offset advance only for n accepted ALSA frames;
     rejected/unaccepted suffix is rendered again from original queued PCM
  -> rb_sink_write -> snd_pcm_writei (frame counts, stereo stride 4)
     direct hw:Y2Audio,0; no plug/plughw implicit format conversion
  -> ALSA RW_INTERLEAVED copy -> managed coherent DMA ring
     signed S16_LE: [Llo,Lhi,Rlo,Rhi], 4 bytes/frame; DMA addresses are 32-bit
  -> MT6582 DL1: current S16 stereo fetch; DAC_CON1 rate9/10, mono bit21=0
  -> AFE I05/I06 -> O00/O01 (CONN0 bits5/22)
     admitted payload16; physical interconnect bus width is not established
  -> second I2S CON3: I2S, CPU clock provider, normal polarity, 32-bit slots
     64 BCLK/frame; MSB first, one-bit I2S delay; expected payload16
     exact padding waveform requires capture; slots add no source information
  -> Linux cs43130 driver for CS43131: params_width=16, ASP receiver word16
     slot width32 derived separately from rate*64 serial clock
  -> CS43131 DAC input: expected 16 meaningful incoming PCM bits
     DAC internal 32-bit processing cannot restore the discarded source bits

Source anchors: Y2Reborn/crates/reborn-media/native/media.c, app/reborn/src/playback.rs (begin_start_with_gapless, sink worker), app/reborn/src/volume.rs (VolumeRamp::render/advance), crates/reborn-audio/src/native.rs (AlsaSink::write), native audio.c, Y2Linux/kernel/audio/mt6582-afe.c and Linux6.18 cs43130.c.

Loss points: signed PCM32 is rounded during S32→FLTP at ordinary amplitudes; channel downmix/resampling and DSP modify samples; DSP operations round their working float values; output_swr quantizes to the admitted sink grid before live user gain. Non-unity live gain adds f64 multiply and another integer quantization in VolumeRamp::render. Current 24-bit sources lose their low8 source bits at output_swr S16 conversion, before live gain and DMA. Crossfade previously also truncated its Q31→S16/S24 conversion toward negative infinity. The correction fixes that bias. Source precision is separate from decoder_sample_fmt, internal_sample_fmt, final_sample_fmt and ALSA valid_bits diagnostics.

MT6582 evidence and decision

Primary exact-SoC source: MediaTek MT6582 BSP AFE header and kernel memory-ring implementation. Downloaded exact source identities are in sources.json. An independent retained BSP revision d53dd75c3ff77cac3f5be58fddfe660e94f94d64 agrees on these definitions. Its earlier research receipt remains at Y2Linux/out/hardware-final/source-audio/manifest.json; no ROM/recovery provenance was repeated.

Register/controlExact evidenceMeaning and limitation
DL1 BASE/CUR/END, 0x40/44/48Exact BSP and current driverByte-addressed DMA ring. A 32-bit address/memory bus does not establish sample32.
DAC_CON1, 0x14, bits3:0DL1_MODE field; stock SetMemIfSampleRateRate code9 at44100, code10 at48000. This is a rate, not a width selector.
DAC_CON1 bit21DL1_DATA mono/stereo controlCurrent stereo clears it. Renaming this bit to HD would be incorrect.
CONN0, 0x20Current driver and stock second-I2S routeI05/I06→O00/O01 through bits5/22. Route does not prove interconnect width.
I2S_CON3, 0x4cStock programming/current driverEnable bit0, WLEN bit1, I2S bit3, rate bits11:8. 0x90b/0xa0b expected while playing.
MEMIF_PBUF_SIZE, 0x3d8Exact BSP names register but does not define a DL1 wide-fetch fieldNo safe wider write can be derived from the register name.

Research also examined DeVviL's mixed MediaTek tree at 6e398bfbba8a178b780e07e32e62388c4657d535. Its ASoC v1 fetch code contains DL1 fetch at PBUF_SIZE[17:16] and connection24 at 0x6c. These are excluded as MT6582 programming evidence: the actual MT6582 defconfig selects MTK_SOUND_DRV and disables SND_SOC; the shared control source describes MT6583 and neighboring generations. Individual files carry inconsistent copied MT6582 comments. Tree presence or a comment is insufficient compatibility proof. No MT8173/MT67xx/MT8167 fields were imported.

The MediaTek-authored technical brief, revision1.1 page8 lists 8/16-bit audio. This mirrored overview and absence of wide fields in the exact sources support the conservative contract; neither supplies a complete DL1/interconnect specification or proves there is no undocumented wider external path. **Do not select HARDWARE_LIMITED_TO_16 from negative searches.** Missing evidence: a complete MT6582 AFE register description, or working exact-silicon wide DL1/connection/I2S programming with packing and alignment semantics. An analyzer alone cannot justify guessing those writes.

Stock Y2 result

The retained original HAL has SHA256 5c5162f6a68f7db57febd050ee88cc886779dcce5948937149d6cd211eb0e6de. Both exported functions SetMemIfFetchFormatPerSample and SetoutputConnectionFormat resolve to the same 8-byte ARM stub at ELF VA0x31138: mvn r0,#37; bx lr, returning -38/ENOSYS without register I/O. Targeted disassembly and symbol aliases. The retained policy exposes primary PCM16. This is stronger evidence than the mere existence of promising exported names, but still not a silicon ceiling.

Targeted stock DAC initialization sets 0x1000c=0x05 (ASP sample24), 0x5000a=0x06 and 0x5000b=0x0e (channel24). The recovered 32-slot second-I2S programming and stock PCM16 source therefore do not establish meaningful incoming24. Existing retained second-I2S analysis (Y2Player/docs/Y2_AUDIO_PATH_PHASE4_SECOND_I2S.md, private research repository) and Y2Player/out/afe-runtime/2026-07-30_135519/ cover runtime CONN0=0x00400020, CON3=0x90b active/0x90a idle and CON1=0. No stock wide DL1 operation was found.

CS43131 result

The Cirrus DS1155F2 datasheet separately documents incoming PCM size: 0x1000c ASP_SPSIZE[1:0] supports 32/24/16/8 bits, and channel size at 0x5000a/0x5000b[1:0] supports 8/16/24/32. It accepts I2S, left/right justification and TDM, with PCM rates 32–384 kHz. These receiver controls establish incoming32 capability independently of internal processing resolution. See §§4.9,7.1.8,7.3.22–24.

Linux6.18 cs43130.c uses params_width to set receiver sample/channel sizes and derives slot width separately from serial clock/rate/channels. The Y2 machine requests rate×64 and a 22.5792MHz crystal; the driver handles the 48k family through its clock/PLL logic. Current S16 means expected ASP size16 despite slots32. No codec modification is needed to advertise a capability it already has. SoC admission remains the gap.

Containers, negotiation and quantization

ALSA formatContainer bitsUserspace representationNative Y2 meaningful bits/admission
S16_LE16Signed LE, interleaved stereo, 4 bytes/frame16; enabled 44100/48000
S24_LE32Signed24 in low24; fourth byte unused padding (zero from membrane, sign-extended after non-unity live gain); 8 bytes/frameRejected; no native24 proof
S24_3LE24Three packed LE bytes/sample, 6 bytes/frameRejected; no DMA packing implementation
S32_LE32Signed Q31, 8 bytes/frame; decoded24 shifted left8Rejected; no native24/32 proof; FLTP also prevents general full32 source preservation

y2-audio-contract tests all four containers/rates using one intersected RW_INTERLEAVED/format/stereo/rate constraint set. Successful open/constraints are labelled neither hardware precision nor physical playback; meaningful bits remain null in this userspace query. The kernel pcm_contract supplies the separate driver contract. It reports supported modes and current configured/running state, format, container/meaningful/DMA/DL1/AFE widths, serial slot/payload, DAC receiver length and rate. Unknown silicon maximum and physical interconnect width stay null. This new read-only attribute does not wake runtime PM or read MMIO. It is exposed through platform status and allowlisted Diagnostics export, not normal Reborn UI. It is compiled/tested but not installed by this pass.

Reborn already queries exact ALSA intersections, gates wired modes through the platform enablement profile, and selects S32→S24→S16 among admitted formats. The profile remains S16-only because wider transport is unproven. Decode/EQ/ limiter stays float until membrane conversion; live user volume follows that conversion, as detailed above. Active crossfade retains a wider temporary representation. Future admitted24 should also benefit <=16 sources when gain/EQ creates fractional values. Source depth alone should not force a narrower sink. Future precision work must also evaluate carrying float/wider queued samples through live gain until one final sink quantizer, while preserving accepted-frame ramp advancement. Current source must not be described as wholly float through the last user gain stage. No gain/ramp policy changes are made in this pass. Opening failure retains the existing rate-family/S16 fallback and reports the actual negotiation error. Observed Bluetooth contracts remain strict and unchanged.

Float→S16/S32 uses FFmpeg scaling, nearest rounding and clipping. Integer S32→S16 and S32→S24 now round to nearest with ties to even and saturate, including positive-full-scale overflow. Sign handling and padding are covered by exact boundary cases. Live gain separately uses f64, nearest/ties-away and saturation; S24 derives its sign from bit23 before multiplying, S32 from bit31. Dither remains disabled: TPDF at final S16 would decorrelate low-level quantization error and merits a separate measured policy; noise shaping and expensive processing are unwarranted. No dither is used to disguise discarded source precision. The new quantizer fixes bias without adding noise or changing DSP precision. The benchmark includes the limiter even with optional EQ/gain off.

Low-bit results

At44100/48000 in both packed24 WAV and checked-in lossless FLAC fixtures (also software WAV88200/96000), PCM24 patterns including 0x234500/0x234501/0x23457f/0x234580/0x2345ff share upper16 bits. Negative counterparts and independent channel phase are tested. Decode→FLTP DSP→S24_LE and S32_LE final software bytes match every reference sample exactly. These fixtures use neutral user gain. Existing VolumeRamp unity/low-bit/sign and partial-write tests validate its separate byte-copy and accepted-frame behavior; no bit-identical preservation is expected under non-unity gain or EQ. No DMA/I2S24 result is claimed because no such mode is admitted.

Separate signed PCM32 pairs 0x23450001/0x23450002 and their negative counterparts prove the decoder reports s32/source32 while FLTP collapses the differing low bits before final S32 packing. Therefore an S32 ALSA container would still not be proof of complete true32 software output. Arbitrary full32 source preservation would require an appropriate DSP precision/bypass design as well as wider SoC proof. The generator produces packed24 WAVs, low24/S32 reference words, and independent full32 WAV/reference fixtures; its capture checker rejects S16 truncation, channel mismatch and wrong LRCLK, without authenticating capture provenance.

Physical test and CPU boundary

Installed Baseline02: Linux8584ccd85f052f351fe51650b2348c83ca894ed4, Rebornb71b468860233faa0a42b8448ec5777fa952b8e3, boot 27e6d684-3794-4490-95db-a489027cd4f4, taint0. Read-only admission and follow-up acquired /tmp/y2-platform-v1-device.lock non-blockingly. Observed direct S16 acceptance at44100/48000 and wider rejection; idle AFE/suspended PM; headphone off and -60dB mixer. Initial path typo was corrected to the actual 11220000.audio-controller/state. These observations did not start playback.

Fresh S16 playback/CPU runs are NOT_RUN: repeated non-blocking attempts found the device lock occupied by another session. Prepared harness out/highres-audio/run-device.py acquires the same lock without waiting, checks idle PCM and the audited mixer state, uses only a unique /tmp directory, restores the headphone pin, preserves volume and removes its temporary files. It records native S16 DMA/periods/hw_params,44100→48000→44100→48000 start/stop, screen state, natural runtime suspend, boot/taint and kernel errors. It never requests a wide hardware stream. Audible per-channel correctness and independent DAC lock register readback remain unclaimed without that evidence.

Y2Reborn/tools/build/precision-bench.c compiles the actual media membrane, uses process CPU time, five complete decodes, a negligible endpoint checksum and three deterministic five-second FLAC inputs:16/44100,24/48000,24/96000→48000. It compares S16/S24/S32 packing with decoder gain plus three EQ bands off/on, retaining the limiter. It excludes Playback's live VolumeRamp, queue/control and ALSA pacing, so it cannot stand in for complete Reborn playback CPU/headroom. It writes no ALSA output: wider results measure membrane software cost only. Physical Cortex-A7 CPU overhead: NOT_RUN while lock unavailable. QEMU is used for ABI/correctness, never real CPU-headroom claims.

External capture and remaining work

  1. Obtain exact MT6582 DL1 fetch/interconnect packing evidence before enabling

    any new mode. Resolve low24 versus high24 container alignment and any serial HD field from this silicon, never by copying adjacent-SoC constants.

  2. Preserve S16 fallback, native44100/48000 clocks and current volume/rail rules.

    Generate fixtures into a new directory with tools/host/audio_precision.py.

  3. With an analyzer and established voltage/probe safety, acquire BCLK GPIO43,

    LRCLK GPIO44 and SDATA GPIO46; retain original data, board/boot/source identity, measured MCLK and analyzer setup. Observe LRCLK low=left, high=right and I2S one-bit MSB delay. Measure64 BCLK/frame and actual slot/payload/padding.

  4. For an admitted24 mode, decode signed24 payload after explicit alignment;

    normalize at least64 frames to time_s,left_s24,right_s24. Compare with --verify-capture FILE --rate 44100|48000 --first-frame N. References must match lower8 bits exactly. Include S16-truncation and channel-swap negatives.

  5. Only after independent full32 transport evidence, extend wire comparison to

    signed32 fixtures and fix the FLTP/crossfade precision limit. A low24-in-S32 route must be named24 meaningful/32 container, not true32.

  6. Repeat locked start/stop/rate changes/screen-off/runtime-PM on the actual

    installed changed artifact. Verify clock/DAC readiness and errors; capture both channels electrically and qualify audible output separately.

Validation and changed scope

Compact check results and fresh artifact size/hash identities are retained in software-validation.json. Raw logs include deliberate malformed-input/fault-injection errors; their successful test assertions, not absence of all error strings, determine PASS.

ARM test linking exposed a preexisting ALSA metadata ordering error: GNU ld --as-needed discarded libasound before the static membrane referenced it. Build metadata now emits ALSA after that archive; host/ARM tests verify the fix. Early fixture expansion/constraint-count and sandbox mount failures were corrected; final receipts supersede those failed draft runs, without changing the hardware verdict.

Changed files: kernel/audio/mt6582-afe.c; tools/connectivity/audio-contract.c; tools/host/audio_precision.py; platform observe/diagnostic_fields/diagnostics; tools/production/check_installed_arm.py; audio capture/platform evidence tests; new kernel precision-contract test; current state/audio knowledge, roadmap/audit and this report/evidence. Reborn: media.c, native.rs tests, audio build.rs, new precision-bench.c, fixture generator/manifest and two checked-in low-bit FLAC fixtures. Reborn implementation commit: cd5d2430f7560b8077814f23cf45e88ae57bad55. The paired Linux commit is recorded in the final handoff and local out/highres-audio/validation/source-handoff.json. Raw local receipts: out/highres-audio/validation/. This report intentionally distinguishes new compiled diagnostics from installed Baseline02 and software packing from I2S proof.

Published by the schulzcode/y2linux project [1] [3]