Skip to content

topology2: Add USB Audio Offload Link (UAOL) support - #11091

Open
ujfalusi wants to merge 2 commits into
thesofproject:mainfrom
ujfalusi:peter/pr/uaol-tplg
Open

topology2: Add USB Audio Offload Link (UAOL) support#11091
ujfalusi wants to merge 2 commits into
thesofproject:mainfrom
ujfalusi:peter/pr/uaol-tplg

Conversation

@ujfalusi

Copy link
Copy Markdown
Contributor

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-uaol function topology is loaded next to the other function
topologies of the sof_sdw card:

  PCM 21 ------------> gain --> mixin --+
                                        |
  PCM 22 (deepbuf) --> gain --> mixin --+--> mixout --> gain --> UAOL0-Play

  PCM 21 <-------- module-copier <-- eqiir <----------------- UAOL0-Cap

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-id6 to sof-uaol-id10 cover 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 a
Sennheiser 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.

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>
@ujfalusi
ujfalusi requested a review from singalsu August 13, 2026 12:40
@ujfalusi
ujfalusi requested a review from ranj063 as a code owner August 13, 2026 12:40
Copilot AI lite review requested due to automatic review settings August 13, 2026 12:40
@ujfalusi
ujfalusi requested a review from jsarha as a code owner August 13, 2026 12:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 UAOL as 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-id6sof-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.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants