Repository navigation
ASoC: apple: add J815 six-speaker AOP audio - #1533
Conversation
…ation Test whether COUT standby supplies the missing cold-boot fabric setup. A muted zero-data jack stream permitted HPAI capture and subsequent capture-only opens on J813; standby without any playback is the next hardware qualification step. Preserve Thomas Glanzmann’s driver and adapt the T8140 DMA sync-stop pattern from Ryan Murray, also flushing queued HPAI work before DMA teardown. No LPAI buffer binding or codec unmute is performed. (cherry picked from commit 12165bc)
The MacBook Air 15-inch (M5, J815) has six SN012776 speaker amplifiers fed by the AOP, like J813's four. Add its compatible. Assisted-by: Claude Opus 5.5 Signed-off-by: Nick <nekreshen@yandex.ru>
The speaker stream's shape depends on the machine, not only on the SoC. On T8142 the J813 has four amplifiers, while the J815 (MacBook Air 15-inch, M5) has six: six playback slots and twelve voltage/current sense words. Let a machine state its amplifier count when it differs from the SoC default. Assisted-by: Claude Opus 5.5 Signed-off-by: Nick <nekreshen@yandex.ru>
… stream The J815 (MacBook Air 15-inch, M5) uses the T8142 speaker stream with six amplifiers instead of J813's four. Its ADT audio-speaker node has six slots (mask 0x3f) and twelve sense words (mask 0xfff), in speaker-config order: left woofer 1, right woofer 1, left tweeter, right tweeter, left woofer 2, right woofer 2. Add a six-amplifier T8142 configuration and select it with apple,speaker-amps = <6>. The firmware stream must match the PCM exactly, so any other count, or the property on a SoC without a second shape, fails the probe. Tested on J815 on top of an earlier revision of the J813 audio series (Linux aurora-silicon#1423): all six amplifiers probe, the 12-channel sense PCM opens at 48 kHz, and a low-level sweep of each speaker under speakersafetyd found every speaker on its own playback slot and sense pair. Capped playback and the microphones work. This exact revision has been build-tested only. Assisted-by: Claude Opus 5.5 Signed-off-by: Nick <nekreshen@yandex.ru>
The J815 (MacBook Air 15-inch, M5) has J813's AOP-fed card with six SN012776: two woofers and a tweeter per side, with left speakers in the even slots and right speakers in the odd ones. Each amplifier sends a voltage/current sense pair on the same stream. The speakers are locked to the safe level until speakersafetyd holds the volume, as on J813. Tested on J815 on top of an earlier revision of the J813 audio series (Linux aurora-silicon#1423): all six amplifiers probe, the 12-channel sense PCM opens at 48 kHz, and a low-level sweep of each speaker under speakersafetyd found every speaker on its own playback slot and sense pair. Capped playback and the microphones work. This exact revision has been build-tested only. Assisted-by: Claude Opus 5.5 Signed-off-by: Nick <nekreshen@yandex.ru>
DjDeveloperr
left a comment
There was a problem hiding this comment.
Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.
Keep draft until its foundation/dependencies and safety gates are complete. Source review found that1423's mic PCM lacked the worker/DMA synchronization already present in this child; I am carrying that narrow flush/sync_stop subset into1423 first so the foundation does not briefly ship without it. This does not approve a six-amp board graph, higher speaker caps or unqualified playback. The capped speakersafetyd J815 profile source is reviewed/merged separately; that alone does not clear kernel/DT/Asahi DSP pairing or headphone/microphone qualification. Contributor CI approvals are now unblocked for actual results.
Preserve current AOP/ASoC synchronization and the T6050 power-ownership changes from the merged foundation. Keep the J815 T8142 six-amplifier profile's MCA and LEAP leaves AP-owned, like the four-amplifier T8142 profile; the newly required fields must not be omitted or copied from T6050's firmware-owned leaves. The two schemas and J815 machine table retain their original contributor content. The speaker lease, safe-level controls, per-amp ADT gain handling and all other board profiles are unchanged. Signed-off-by: Diljit Singh <hey@djdev.me>
DjDeveloperr
left a comment
There was a problem hiding this comment.
Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.
The original head’s five checks pass and #1423 has merged through its owning M5 lane. Integrated current main925131cc on this child branch as824c7c22 without changing #1423. The net change against that main is four files: two bindings, the J815 macaudio table/match, and the six-amp Rust configuration/property/standby changes.
The clean textual merge exposed an actual Rust initializer error: main added ap_mca/ap_leap, but HW_CFG_T8142_6AMP omitted them. A production-config extraction compiled the actual struct and all four initializers and reproduced E0063 before the fix. The initializer now retains the existing T8142 true/true AP ownership; fixed config/selector tests pass, and compiled ownership mutations fail runtime assertions. Existing four-amp defaults and T6050 false/false ownership are unchanged.
Source review preserves #1423’s mic worker flush, PCM/component sync_stop, current AOP ring/API contracts and all existing macaudio interlock/ADT-level/cap handling. The six-amp mode is selected only for the T8142 config with explicit4/6 counts; unknown shapes are rejected. J815 safe_vol remains-20. COUT initialization before microphone registration is standby only, before userspace exposure; it adds no DMA start or codec unmute. Both sound schemas pass strict document/reference checks. These are source/config checks, not complete hardware qualification.
Keep draft. Fresh current-head CI and actual AArch64 t8152_aop_audio.o, aop.o and macaudio.o validation are pending. I queued exactly one pinned-source build under the owner’s shared kbuild lock, nice19/ionice-c3/-j2, with disk-floor guards; it must not run alongside the current lock holder. SEP Rust/KUnit checks are not substituted for the audio-object build. The original J815 protection/sense/microphone report retains its old source scope; no new playback, recording, enrollment, loader/default or hardware operation was requested. J815 DT1534/1532 rollout gates remain separate.
Preserve both complete board configurations and match entries, keeping J714's tweeter HPF grant separate from the capped J815 profile.
DjDeveloperr
left a comment
There was a problem hiding this comment.
Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.
Both824c7c22 Host/DT checks passed, but main’s new J714 audio support introduced a real source conflict. Normally merged main990e00b7 as ab0a715 using the independently reviewed union already prepared for1534: whole main C/admission/protection logic plus the original J815 config/comment/match. J714’s HPF grant stays true and J815’s false with its safe cap unchanged. AOP Rust and its schema are unchanged from824c; four audio/binding files remain above main.
Actual C config/match GCC/UBSan controls and four compiled runtime mutants pass; strict sound-binding controls pass. Kernel-code directory IDs for drivers/sound/rust/include/scripts exactly match1534@5fac88d6, so a single verified build of these common inputs can support their shared audio source without duplicate compilation. This is source identity, not an object-build pass.
Keep draft for new-head CI and exact AArch64 audio/AOP/macaudio object validation. The previous manager exited before building, and only its orphaned lock waiter was retired; the keeper’s active lock/build was not touched. One new bounded validation task will queue normally with nice19/ionice-c3/-j2 and8GiB reserve-floor rules. Existing DT/physical/protection limits remain; no playback, recording, loader/default or other-build operation was performed.
DjDeveloperr
left a comment
There was a problem hiding this comment.
Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.
Current-head Host and DT checks passed, as already recorded. The separate three-object validation did not reach source verification, configuration or compilation: after acquiring the shared build lock, its storage guard found 13,307,084,800 bytes free against the required 13,958,643,712 bytes (8 GiB free floor plus a 5 GiB initial peak estimate). It stopped before writing source/build data and released its own lock.
This is a local validation/storage blocker, not a compiler diagnostic or a failed public CI check. No object, kernel, module or hardware pass is claimed. Current source remains ab0a715; retain draft status until actual object validation and final review. No automatic retry, other-lane interruption, reserve use or deletion of source/build/final/rollback evidence occurred. The existing CI and physical/audio-protection scopes remain unchanged.
DjDeveloperr
left a comment
There was a problem hiding this comment.
Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.
Final source approval for ab0a715. The remaining software gates are closed: both actual Host/DT checks passed, and the pinned-source validation compiled t8152_aop_audio.o, aop.o and macaudio.o as AArch64 objects with zero warnings/errors. Source/tree/blob seals, required Rust/module config and bindgen checksum passed; I independently verified object bytes/SHA256/ELF proofs and clean source. The shared lock was released, no worker/queue/lease remains, disk floor and emergency reserve were preserved. No repeat build is needed.
The four-file source diff preserves main’s complete J714/admission/protection code and the original capped J815 configuration, separate match and no HPF grant. T8142 alone accepts the explicit four/six amplifier selector, preserving existing AP ownership and other-SoC defaults. COUT setup before microphone registration is standby only, with no DMA start or codec unmute. Previously reviewed config/selector/schema and compiled ownership/HPF controls apply unchanged; current main has no subsequent feature-file or relevant AOP/audio-interface changes. The original J815 sense/playback/microphone report retains its stated earlier-source scope.
This approves the source layer, without claiming full module/kernel linkage or new physical audio qualification. J815 board DT enablement and #1532/#1534 loader/physical rollout gates remain separate; no speaker, recording, loader/default or image operation was requested. Draft status can now be removed for this source merge.
12f3c1b
into
aurora-silicon:integration/aurora
Retain current main's ISP binding, including the T8140/Neo sensor-domain order and T8142 eight-domain case. The audio code and sound bindings from aurora-silicon#1533 have already landed and now match main exactly. Preserve all added and removed lines in the remaining 15 DT and binding feature files, including the seven-region T8142 GPU schema and underscore loader alias. Keep compatible-loader qualification/adoption and shared J813/J815 DT and protection qualification as draft gates. Eight binding documents pass metaschema/reference checks. The processed GPU schema passes 32 current controls and 32 main-profile controls. This merge does not claim a compiled DTB, new hardware boot or physical audio. Assisted-by: LLM
Add the T8142 six-amplifier speaker shape selected by an explicit
apple,speaker-amps = <6>property, its J815 macaudio configuration and the matching sound bindings. Existing four-amp defaults and T6050 ownership remain unchanged; unknown shape/config combinations are rejected.The J815 configuration retains the -20 dB safe cap, existing ADT level/interlock checks and no tweeter-HPF grant. Before microphone-card registration, the shared output service is initialized to standby; this starts no DMA and unmutes no codec. Current J714 configuration, HPF grant and admission/protection logic are preserved. The speakersafetyd J815 profile has merged separately; that is not DT or whole-system rollout qualification.
Current source
ab0a715b10f4caa4228297d2c1e0f76455984941passed both actual hosted checks: Host 43111512499 and DT 43111512482. Exact-source local validation also compiled all three AArch64 objects with zero warnings/errors: t8152_aop_audio.o (267584 bytes), aop.o (808760 bytes) and macaudio.o (470824 bytes). Required Rust/module configuration, source/tree/blob seals and bindgen checksum passed. The parent independently verified object sizes, SHA256s, ELF architecture and clean source. Toolchain: Clang 23.1.1, Rust 1.99.0, bindgen 0.73.2. This is object compilation, not full module/kernel linkage or a new hardware test.Actual config/match GCC/UBSan controls, compiled ownership/HPF negative controls and strict sound-binding checks retain their earlier source scope. Current main has no subsequent changes in these four feature files or their AOP/audio interfaces. The normal main merge retains original authorship and the independently reviewed J714/J815 union.
This source-only layer does not enable the J815 board graph. #1532/#1534 DT, loader and physical pairing/qualification gates remain separate. Original reported J815 playback/sense/microphone results below predate this integration and are not relabeled as new-head hardware results. No new playback, recording, loader/default or image operation was performed.
Original feature description and hardware report:
apple,speaker-ampsapple,speaker-configas in J813: AOP sound on integration/aurora (speakers, jack, microphones) #1423Tested on J815 with speakersafetyd (J815 profile: aurora-silicon/speakersafetyd#2): a low-level sweep put every speaker on its expected sense pair (R 3.4–4.1 ohm); sustained music playback with the thermal model logging; the three-mic array records through the UCM/DSP path. Happy to fold this into #1423 instead if that is easier.
Part of the J815 (MacBook Air 15-inch, M5, T8142) bring-up: board results are summarised in discussion #135. Tested on a J815 with a macOS 27.0 stub (firmware 27.0) through aura Stage 2.
Assisted-by: Claude Opus 5.5