Uh oh!
There was an error while loading. Please reload this page.
topology2: Add USB Audio Offload Link (UAOL) support - #11091
Open
ujfalusi wants to merge 2 commits into
Open
Conversation
The USB Audio Offload Link is an ACE2+ alt link. The firmware enumerates its gateways in the ALH class family, but the ALH DAI class carries SoundWire specific attributes, so UAOL is described by a DAI class of its own. Allow "UAOL" as a dai type and as a copier type, and let the dai-copier take the two UAOL node types which common_definitions.conf already defines. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
The sof_sdw machine driver creates a backend DAI link for the USB Audio Offload Link when the platform reports one. Add the function topology which is loaded next to the other function topologies of that card. The playback path is a mixer based one, so a deep buffer PCM can share the link with the normal playback PCM. The capture path is a straight one with a high pass EQ IIR, matching what the SoundWire jack does, because the number of captured channels follows the USB device while a mixer only handles a fixed channel count. The two directions are separate DAI links so that the format fixup of a link is decided by the DAI copier of that direction alone. Their names are kept short because alsatplg drops the widget tuples once the generated widget name exceeds 36 characters. The UAOL backend is the last one the machine driver creates, so its DAI link ID depends on the composition of the board. Build the ID variants which the SoundWire boards can produce. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds a new Topology2 “function topology” (cavs-uaol) to support the USB Audio Offload Link (UAOL) on Intel SoundWire/ACE2+ platforms, enabling the DSP to directly drive an offloaded USB isochronous endpoint for playback, deep-buffer playback, and capture (with EQ IIR in the DSP).
Changes:
- Introduce a UAOL function topology with playback + deep-buffer mix into a UAOL playback DAI, and a separate capture DAI link feeding EQIIR and a module-copier into the host.
- Add a dedicated UAOL DAI class and enable
UAOLas a valid DAI / DAI-copier type, including UAOL-specific node types. - Register UAOL topology build targets (per backend link-ID variants) and document UAOL PCM/pipeline ID ranges in the Topology2 README.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tools/topology/topology2/README.md | Documents UAOL PCM IDs and pipeline IDs alongside existing SoundWire conventions. |
| tools/topology/topology2/production/tplg-targets-sdca-generic.cmake | Adds build targets for cavs-uaol variants (sof-uaol-id6 … sof-uaol-id10). |
| tools/topology/topology2/platform/intel/uaol-generic.conf | Defines UAOL playback/deepbuf/capture pipelines, UAOL DAIs, PCMs, and routes. |
| tools/topology/topology2/include/dais/uaol.conf | Adds a dedicated Class.Dai."UAOL" definition. |
| tools/topology/topology2/include/components/dai.conf | Allows UAOL as a DAI type. |
| tools/topology/topology2/include/components/dai-copier.conf | Allows UAOL as a dai-copier type and adds UAOL node type constants. |
| tools/topology/topology2/cavs-uaol.conf | New top-level UAOL function topology that wires in the UAOL generic implementation and defines default IDs. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+44
to
+45
| # taken. The range below covers a jack and amplifier board without DMIC and BT | ||
| # (6) up to a jack, amplifier with feedback, PCH DMIC and BT board (10). |
| # the BT link. Each direction is a separate link, so two consecutive IDs are | ||
| # taken. The range below covers a jack and amplifier board without DMIC and BT | ||
| # (6) up to a jack, amplifier with feedback, PCH DMIC and BT board (10). | ||
| # Add a variant here for every further ID that is needed. |
Collaborator
There was a problem hiding this comment.
In the most extreme case, only SoundWire jack is listed. The USB Audio Offload ID could be 2.
Something like:
00-00: Jack Out (*) : : playback 1
00-01: Jack In (*) : : capture 1
00-02: USB Audio
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add the topology for the USB Audio Offload Link, the ACE2+ alt link which lets
the DSP drive an offloaded USB isochronous endpoint directly.
UAOL belongs to the ALH class family in the firmware, but the ALH DAI class
carries SoundWire specific attributes, so it gets a DAI class of its own.
The
cavs-uaolfunction topology is loaded next to the other functiontopologies of the sof_sdw card:
The capture path carries no mixer because the captured channel count follows
the USB device, while a mixer only handles a fixed channel count.
The two directions are separate DAI links so the format fixup of a link is
decided by the DAI copier of that direction alone. The UAOL backend is the
last one the machine driver creates, so its link ID depends on the board;
sof-uaol-id6tosof-uaol-id10cover the range SoundWire boards produce.Depends on the kernel side UAOL series, which is not upstream yet.
Tested on a PTL device, resolves to
sof-uaol-id9) with aSennheiser 1395:0024 and a Huawei 12d1:3a07 headset: playback, deep buffer,
both mixed, and capture with the EQ IIR running in the DSP.
Known limitation: the PCM advertises the topology's capabilities rather than
those of the connected device, so an unsupported format or channel count is
only rejected at hw_params time. Constraining it needs kernel side work.