aports: extract vendor blobs before udev coldplug so first-boot audio fully works
The preset fix (6ecc1dc) makes the unit run, but multi-user is too late: the
sound card probes at ~21 s, hard-fails (-2, no retry) on the missing ACF, and
the extractor's amp rebind at ~60 s cannot re-form a card whose machine
driver already failed. Re-probing the machine driver does re-form it, but a
late-formed card has a dead capture path - the wcd9378 TX sequencer refuses
PS0 (act_ps 0x3) until the next boot. So rebinding after the fact can never
fully win; extraction has to happen before the drivers probe.
- fp6-vendor-blobs.service: DefaultDependencies=no, run after remount-fs and
before systemd-udev-trigger, so blobs exist before module coldplug.
multi-user stays a second Wants as a post-udev retry if the early run
failed (by-partlabel/make-dynpart-mappings fallbacks need udev).
- aw88261-acf.manifest: add 'rebind platform sound' so the fallback path at
least recovers playback the same boot (capture then heals on reboot).
- fp6-vendor-blobs.post-upgrade (pkgrel 1): systemctl preset + immediate
extract, so installs of the 2026-08-24 image (unit shipped disabled, no
version bump to deliver the preset) finally heal via plain apk upgrade.
- soc-fairphone-fp6-audio pkgrel 1: carries the manifest change.
Verified on the dev phone with the exact staged bytes (sha256-compared):
simulated fresh install (ACF removed, reboot) extracts at 13.3 s, coldplug
probes the amps at 15.1 s, card init at 20.9 s loads the ACF cleanly, and a
1 kHz speaker-to-mic loopback passes on that same first boot with zero TX
sequencer warnings; next boot takes the all-dests-present fast path in 25 ms.
Evidence: fp6 repo journal/blobs/, 2026-08-29.
Assisted-by: Claude:claude-fable-5
This commit is contained in:
parent
fbb0ed2a37
commit
01ee20ddba
5 changed files with 50 additions and 15 deletions
|
|
@ -3,8 +3,14 @@
|
|||
# journal/blobs/, 2026-08-24). Slot A first, slot B as fallback; the copy
|
||||
# must hash-match the blob the audio stack was tested with.
|
||||
file vendor_a,vendor_b firmware/aw882xx_acf.bin /usr/lib/firmware/qcom/milos/fairphone/fp6/aw88261_acf.bin af723973655ba5901948d4a22212323e39ce53ff0156021185720af4af6ab0b3
|
||||
# the amps bind on i2c probe but request the ACF only at card init, which
|
||||
# races the extractor on first boot and is never retried on failure - a
|
||||
# forced fresh probe of both amps makes audio work that same boot either way
|
||||
# Rebinds are the FALLBACK for a card that probed before extraction (the
|
||||
# service normally runs pre-coldplug, so they no-op). The amps bind on i2c
|
||||
# probe but request the ACF only at card init, never retried on failure; and
|
||||
# when that failed card init already took the machine driver down (-2, not a
|
||||
# defer), re-probing the amps alone cannot re-form the card - the platform
|
||||
# device needs a fresh probe too. Note the recovered card plays back fine
|
||||
# but its capture path is dead until the next boot (wcd9378 TX sequencer
|
||||
# refuses PS0 on a late-formed card - journal/blobs/ 2026-08-29).
|
||||
rebind i2c 6-0034
|
||||
rebind i2c 6-0035
|
||||
rebind platform sound
|
||||
|
|
|
|||
Loading…
Reference in a new issue