From: GitHub issues - opened <github@alsa-project.org>
To: alsa-devel@alsa-project.org
Subject: sof-soundwire: missing codecs/rt721+rt1320/init.conf makes UCM fail to load on cards reporting "spk:rt721+rt1320"
Date: Sun, 6 Sep 2026 03:38:01 +0200 (CEST) [thread overview]
Message-ID: <18d29797972bf900-webhooks-bot@alsa-project.org> (raw)
In-Reply-To: <18d297979706d300-webhooks-bot@alsa-project.org>
alsa-project/alsa-ucm-conf issue #851 was opened from edrdmolina:
### Summary
On a machine whose card components report `spk:rt721+rt1320`, UCM fails to open the card entirely because `sof-soundwire.conf` includes `/codecs/${var:SpeakerCodecFile}/init.conf` with `SpeakerCodecFile` still set to the *combined* string `rt721+rt1320`, and no such directory exists.
`ucm2/sof-soundwire/rt721+rt1320.conf` was added by #744, but no matching `ucm2/codecs/rt721+rt1320/` was added alongside it. `codecs/rt721/` and `codecs/rt1320/` both exist; only the combined directory is missing. This is still the case on master.
The result is not a degraded profile but a hard failure: PipeWire/WirePlumber falls back to a generic ACP profile that opens the wrong PCM, so the machine has no working speakers and no microphones.
### Error
```
$ alsaucm -c hw:1 list _verbs
ALSA lib utils.c:373:(uc_mgr_config_load_into) [error.ucm] could not open configuration file /usr/share/alsa/ucm2/codecs/rt721+rt1320/init.conf
ALSA lib parser.c:80:(uc_mgr_config_load_file) [error.ucm] failed to open file /usr/share/alsa/ucm2/codecs/rt721+rt1320/init.conf: -2
ALSA lib main.c:1805:(snd_use_case_mgr_open) [error.ucm] failed to import hw:1 use case configuration -2
alsaucm: error failed to open sound card hw:1: No such file or directory
```
### Environment
- alsa-ucm-conf 1.2.16.1
- alsa-lib 1.2.16.1
- kernel 7.1.9 (Arch), Intel Panther Lake, `sof-audio-pci-intel-ptl`
- Card longname: `LENOVO-83SN-YogaPro715IPH11-LNVNB161216`
- Components: `HDA:80862822,80860101,00100000 cfg-amp:2 mic:dmic cfg-mics:4 iec61937-pcm:7,6,5 hs:rt721 spk:rt721+rt1320`
The kernel has no RT721 machine-driver entry for this platform, so `sof_sdw` uses the generic fallback ("Use SoundWire default machine driver with function topologies"). That path emits `spk:rt721+rt1320` as a single combined token.
### Root cause
In `ucm2/conf.d/sof-soundwire/sof-soundwire.conf`, `SpeakerCodecFile` is initialised to `SpeakerCodec1` (`rt721+rt1320`), then `MultiCodecInit` is supposed to narrow it to a single codec id. For this components string the macro is:
- `Haystack` = `=rt721+rt1320=rt721=dmic`
- For `CodecId=rt721`: the outer `Needle "=rt721"` matches, but the inner speaker test uses `Regex "=(rt721(-sdca)?)="` against `String "=rt721+rt1320="`, which does **not** match (the `+rt1320` sits between `rt721` and the closing `=`). So `SpeakerCodecFile` is not narrowed. It *does* match the headset branch, so `HeadsetCodecFile` correctly becomes `rt721`.
- For `CodecId=rt1320`: the outer `Needle "=rt1320"` does not match the haystack at all, because `rt1320` is preceded by `+`, not `=`.
`SpeakerCodecFile` therefore stays `rt721+rt1320`. The subsequent include filter regex contains the alternative `rt721`, which matches as a substring search against `rt721+rt1320`, so the guard passes and:
```
True.Include.a.File "/codecs/${var:SpeakerCodecFile}/init.conf"
```
resolves to the nonexistent `/codecs/rt721+rt1320/init.conf` and aborts the whole import.
For comparison, the Cirrus combination is handled by shipping the combined directory (`codecs/cs42l43-spk+cs35l56/`) rather than by narrowing, so the same code path succeeds there.
### Fix
Adding an (effectively empty) `ucm2/codecs/rt721+rt1320/init.conf` is sufficient. I verified this against an unmodified tree using `ALSA_CONFIG_UCM2`, and the verb then loads correctly:
```
$ alsaucm -c hw:1 set _verb HiFi list _devices
0: HDMI3 ...
3: Headphones
4: Headset Headset Microphone
5: Mic Digital Microphone
6: Speaker Speaker
$ alsaucm -c hw:1 set _verb HiFi get PlaybackPCM/Speaker
PlaybackPCM/Speaker=_ucm0001.hw:sofsoundwire,2
```
Nothing from `codecs/rt1320/init.conf` is actually required for this combination:
- `codecs/rt721/init.conf` is already pulled in via the headset branch (`HeadsetCodecFile` = `rt721`), so the RT721 `BootSequence` still runs.
- `sof-soundwire/rt721+rt1320.conf` drives `rt1320-1 OT23 L/R Switch` directly in its Enable/DisableSequence rather than through `${var:SpeakerMixerElem}`, so the mixer-element definitions in `codecs/rt1320/init.conf` are unused here.
Including `codecs/rt1320/init.conf` from the combined file would in fact be actively wrong on this machine: the components report `cfg-amp:2`, which selects the `twoAmps` branch and remaps controls for a second amp (`rt1320-2 ...`) that does not exist — there is one RT1320 driving both channels, and `rt721+rt1320.conf` already handles that correctly via its `ControlExists` test on `rt1320-2 OT23 L Switch`.
If you would prefer the narrowing approach over shipping a combined directory, the alternative is to make `MultiCodecInit` split `A+B` speaker tokens (and set `SpeakerCodecFile` to the amp), but that would change behaviour for the existing Cirrus combination too, so the combined directory looks like the lower-risk fix.
### Possibly also affected
`ucm2/sof-soundwire/rt712+rt1320.conf` exists with no corresponding `ucm2/codecs/rt712+rt1320/`. If any machine reports `spk:rt712+rt1320`, it should fail in exactly the same way. I do not have that hardware to confirm.
I'm happy to open a PR with the added file if that's useful.
Issue URL : https://github.com/alsa-project/alsa-ucm-conf/issues/851
Repository URL: https://github.com/alsa-project/alsa-ucm-conf
parent reply other threads:[~2026-09-06 1:38 UTC|newest]
Thread overview: expand[flat|nested] mbox.gz Atom feed
[parent not found: <18d297979706d300-webhooks-bot@alsa-project.org>]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=18d29797972bf900-webhooks-bot@alsa-project.org \
--to=github@alsa-project.org \
--cc=alsa-devel@alsa-project.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.