Skip to content

ASoC: apple: add J815 six-speaker AOP audio - #1533

Merged
DjDeveloperr merged 7 commits into
aurora-silicon:integration/aurorafrom
m0d16l14n1:j815/aop-audio
Nov 12, 2026
Merged

DjDeveloperr merged 7 commits into
aurora-silicon:integration/aurorafrom
m0d16l14n1:j815/aop-audio

Conversation

@m0d16l14n1

@m0d16l14n1 m0d16l14n1 commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

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 ab0a715b10f4caa4228297d2c1e0f76455984941 passed 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:

  • Acelogic's "initialize J813 output standby before microphone registration" (cherry-picked, authorship kept)
  • dt-bindings: macaudio: J815
  • dt-bindings: t8152-aop-audio: apple,speaker-amps
  • t8152-aop-audio: the six-amplifier T8142 speaker stream (4 woofers + 2 tweeters, one V/I sense pair each); each amp's level comes from the ADT apple,speaker-config as in J813: AOP sound on integration/aurora (speakers, jack, microphones) #1423
  • macaudio: J815

Tested 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

Acelogic and others added 5 commits November 11, 2026 09:22
…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 DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 DjDeveloperr changed the title ASoC: apple: J815 six-speaker AOP audio (stacked on #1423) ASoC: apple: add J815 six-speaker AOP audio Nov 12, 2026

@DjDeveloperr DjDeveloperr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@DjDeveloperr
DjDeveloperr marked this pull request as ready for review November 12, 2026 01:10
@DjDeveloperr
DjDeveloperr merged commit 12f3c1b into aurora-silicon:integration/aurora Nov 12, 2026
2 checks passed
DjDeveloperr added a commit to m0d16l14n1/linux that referenced this pull request Nov 12, 2026
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants