All of lore.kernel.org
 help / color / mirror / Atom feed
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

           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.