Keep the DSPs out of the initramfs, and let the headphone port be chosen
Some checks failed
build image / build (push) Has been cancelled

Rebuilding the initramfs on the machine rather than in the build container
pulled qcom_q6v5_pas into it. There it probes while the initramfs is still the
root filesystem, asks for qcadsp850.mbn, gets -2, and never retries — the same
race 10-c630.conf already documents for the Adreno firmware. The ADSP hosts
the whole audio path, so the machine comes up with no sound card and a sound
device deferring on "error getting cpu dai name", which points nowhere near
firmware. The blobs cannot go in the initramfs to fix it: they are ~20 MiB and
are extracted from Windows, so they need not exist at build time. Omitting the
driver instead means it loads once the real root is there. The modem driver
goes with it, since it is not needed early either.

Separately, the WCD9340 decides what is plugged in by measuring impedance, so
an amplifier on the headphone socket reads as an open circuit and the jack
control never leaves 'off'. PipeWire marks the port not available, will not
keep it as the default sink, and GNOME hides it — an output that works when
driven directly becomes unreachable from the desktop. Dropping JackControl
from the Headphones device leaves availability unknown rather than no, and the
port becomes permanently selectable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011XgGF5wfxLDAybVnNz6eNQ
This commit is contained in:
2026-08-14 16:41:03 +03:00
parent 477d43aacd
commit 36dc54e8db
3 changed files with 159 additions and 0 deletions

View File

@@ -23,3 +23,27 @@ add_drivers+=" nvmem_qfprom qcom_scm rtc-pm8xxx "
# of kilobytes in the initramfs fixes it. The model-signed zap shader is a
# separate problem; see docs/firmware.md.
install_items+=" /usr/lib/firmware/qcom/a630_sqe.fw.xz /usr/lib/firmware/qcom/a630_gmu.bin.xz /usr/lib/firmware/qcom/sdm845/a630_zap.mbn.xz "
# The DSPs lose the same race, and cannot be fixed the same way. qcom_q6v5_pas
# auto-boots the ADSP, CDSP and SLPI the moment it probes; if that happens in
# the initramfs the per-model firmware on the real root is not there yet:
#
# remoteproc remoteproc0: Direct firmware load for
# qcom/sdm850/LENOVO/81JL/qcadsp850.mbn failed with error -2
#
# and, as with the GPU, nothing retries. The ADSP hosts the whole audio path,
# so the result is a machine with no sound card at all — the sound driver sits
# in deferred probe reporting "error getting cpu dai name", which says nothing
# about firmware and sends you looking in the wrong place.
#
# Putting these blobs in the initramfs is not an option: they are ~20 MiB, and
# unlike the Adreno firmware they are not in any package — they are extracted
# from Windows by c630-firmware, so at build time they may not exist. Keeping
# the driver out of the initramfs instead means it loads after the switch to
# the real root, where the firmware is plainly visible. Nothing needs a DSP to
# get that far.
#
# The modem driver goes too. It is not needed early either, and leaving it out
# keeps it from crash-looping (see docs/firmware.md) before the rmtfs drop-in
# that tames it has had a chance to start.
omit_drivers+=" qcom_q6v5_pas qcom_q6v5_mss "