Commit 7808c63f by PLN (Algolia)

docs(audio): only Pro Audio is a saved pin, and the laptop card lost its HiFi profile

Two causes, one symptom. WirePlumber's own policy script never picks pro-audio
(it skips it by name), so both cards sitting on it can only come from the saved
default-profile file -- which is consulted before the automatic pick and is
therefore why it never self-corrects.

The laptop codec is a different story: ALSA UCM still lists its HiFi verb and
the kernel brought Jack Out / Speaker / HDMI up clean at boot, so the profile
list PipeWire built at enumeration is what is short. That needs a device
re-probe, not a setting.

Names the risk before the fix: pro-audio is the profile that opens the capture
PCM which hung the DSP in July, and the node guard written then is no longer on
disk.
parent 80f2115a
# Why pavucontrol shows only "Pro Audio", and why it never fixes itself
**Status:** diagnosis, 2026-09-22. Read-only — nothing here has been changed.
PLN: "why i see only pro audio? Can parvagues tooling ensure we have proper
system and pavucontrol showing Speaker Headphones HDMI 1/2/3 etc as usual
never stuck on pro audio without autofix?"
## The state of the box
Two ALSA cards, no USB interface attached:
| card | device | profiles offered | active |
|---|---|---|---|
| `alsa_card.pci-0000_01_00.1` | NVIDIA HDMI (dGPU) | `off`, 6× HDMI stereo/surround, `pro-audio` | **pro-audio** |
| `alsa_card.pci-0000_00_1f.3-platform-sof_sdw` | laptop codec (Speaker / Jack / HDMI) | `off`, `pro-audio` **only** | **off** |
So: Speaker and Headphones are not "hidden", they are **not offered** — the SOF
card's `HiFi` profile is absent from PipeWire's list entirely. And the NVIDIA
card's HDMI profiles are all `available: no`, because no display with audio is
plugged in.
## Two separate causes
### 1. A saved pin, which is exactly why it never autofixes
`~/.local/state/wireplumber/default-profile`:
```
alsa_card.pci-0000_00_1f.3-platform-sof_sdw=off
alsa_card.pci-0000_01_00.1=pro-audio
```
WirePlumber's `policy-device-profile.lua` consults that file **first**
(`findDefaultProfile`) and only falls through to its own pick if the saved
profile is unavailable. Both entries are available, so they win on every boot,
forever. This is the "stuck" — it is a preference, not a fault.
It is also proof the pin was set **by hand** (pavucontrol/pactl), because
`findBestProfile` skips `pro-audio` by name:
```lua
elseif profile and profile.name ~= "pro-audio" then
```
WirePlumber will never choose Pro Audio on its own. Something chose it once.
Remove the two lines and the automatic pick takes over: the NVIDIA card goes to
`off` while nothing is plugged, and to `Digital Stereo (HDMI)` (priority 5900)
the moment a display appears. That is the "as usual" behaviour.
### 2. The laptop card lost its HiFi profile, and ALSA is not to blame
The layers below PipeWire are healthy:
```
$ alsaucm -c sof-soundwire list _verbs
0: HiFi
Play HiFi quality Music
$ aplay -l
card 1: sofsoundwire, device 0: Jack Out <- Headphones
card 1: sofsoundwire, device 2: Speaker
card 1: sofsoundwire, device 5/6/7: HDMI 1/2/3
```
and the kernel brought the card up clean at boot (20:12:54: Headset Jack,
HDMI/DP pcm=5,6,7 registered, **no IPC error, no DSP timeout** — none of the
2026-07-26 signature). So every sink he wants is present at the ALSA layer and
PipeWire simply did not build the profile when it enumerated the card, ~11.5 s
into the boot.
**A profile list is built once, at device creation.** Getting `HiFi: Default`
back therefore needs the device re-probed, which means restarting WirePlumber.
Per #39's own learnings that restart resets sink volume to the device default
(87%) and drops any `fold-orbits` links — a calm-evening move, before a
rehearsal, never at a venue.
## The risk that has to be named first
`pro-audio` on the SOF card is **the dangerous profile**, not the safe one: it
opens the raw PCMs including `pcm4` (Microphone), the exact PCM that hung the
SOF DSP on 2026-07-26 and put WirePlumber in uninterruptible D-state, unkillable,
taking scsynth down mid-session and needing a reboot (archive #39).
The guard written then — `~/.config/wireplumber/wireplumber.conf.d/51-disable-sof-dmic.conf`,
`node.disabled` on the capture node — **is gone**. That directory now holds only
`50-alsa-config.conf`; its mtime is Sep 20 19:31. Nothing in this repo writes
there (checked: `grep -rn wireplumber tools/` finds only documentation and the
gig-up warning), so it was removed outside the tooling.
Order of operations, therefore:
1. rewrite the DMIC guard, matching the node **by name** (`HiFi__Mic__source`) —
the archive's "card3" is stale by its own "the ALSA card number is not
stable" learning;
2. clear the two `default-profile` pins;
3. restart WirePlumber once, on a calm evening, and check `HiFi` appears;
4. only then set the SOF card to HiFi.
## Gig relevance
With the UMC202HD unplugged and the SOF card `off`, there is **no analog sink at
all** on this box — `gig-up --headphones` has nothing to fold onto. That is fine
for a venue (the UMC is the gig interface) and blocking for a train rehearsal.
## What tooling can honestly promise
Following `check-preload.sh`'s shape — check by default, mutate only on an
explicit flag, and the gate never passes the flag:
- **check**: a card pinned to a profile while a higher-priority one is
available; a card whose UCM verbs exist but whose PipeWire profile list does
not offer them. `ADVISE`, not `BLOCK` — a pinned card is a preference, and the
gate must not refuse to launch over one.
- **--fix**: for the NVIDIA card, clear the pin and set the best available
profile. That is a complete fix.
- **--fix cannot restore HiFi on the SOF card**, because that needs a device
re-probe. The tool must say so in words rather than pretend, and must never
restart WirePlumber on its own during a set.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment