Skip to content

soundwire/SDCA: enable the four TAS2783 speakers on HP OmniBook Ultra 14 (8EB4) - #5904

Open
kaseyprichard wants to merge 2 commits into
thesofproject:topic/sof-devfrom
kaseyprichard:hp-omnibook-8eb4-tas2783
Open

soundwire/SDCA: enable the four TAS2783 speakers on HP OmniBook Ultra 14 (8EB4)#5904
kaseyprichard wants to merge 2 commits into
thesofproject:topic/sof-devfrom
kaseyprichard:hp-omnibook-8eb4-tas2783

Conversation

@kaseyprichard

Copy link
Copy Markdown

Fixes the silent internal speakers on the HP OmniBook Ultra 14 (board 8EB4, Panther Lake, 4x TI TAS2783 on SoundWire links 1/2 + RT712 on link 3). Tracked in #5732 (also #5877, #5802); the SDCA half is the same defect as #5760.

Two independent problems, one patch each — see the commit messages for details:

  1. ASoC: SDCA: fall back to SmartAmp function type for TI TAS2783 — the BIOS declares the Function Topology control with access mode 3 and no DC value; upstream deliberately requires a DC value (HP Elitebook X (Panther Lake) - no sound. #5760) and HP fixed the EliteBook X via BIOS, but 8EB4 F.06 (latest) still lacks it. Minimal known-peripheral fallback; I'm fine dropping it if HP commits to a BIOS fix.
  2. soundwire: intel: override ACTMCTL DOAIS/DOAISE2 on HP OmniBook Ultra 14SNDW._INI overwrites the static intel-sdw-doais/doaise2 = 1 with NVS values 3/0; with those, three of four amps drop off the bus after attaching. Runtime bisect: DOAIS=1 + DOAISE2=1 is necessary and sufficient. DMI-keyed override for links 1 and 2.

Tested on 7.2.2 with stock soundwire-bus and snd-soc-tas2783-sdw, only these two changes: 4/4 amps attach and stay attached, firmware first try, PARITY 0 at boot and after streaming, Speaker PCM present, all four speakers verified individually. checkpatch --strict clean.

How this was found: 28 numbered single-change experiments on the machine (most a full instrumented reboot with a captured boot log), finishing with a live runtime bisect of the ACTMCTL fields; experiments 0024–0028 then reverted everything else to prove these two patches alone suffice on pristine v7.2.2 files. The work was AI-assisted (Claude Code); both commits carry Assisted-by: trailers per Documentation/process/coding-assistants.rst, and I have reviewed and boot-tested everything here myself. The experiment index is in the repo README linked below.

Questions: is intel_auxdevice.c the right home for an ACTMCTL override (vs dmi-quirks.c or a machine-driver quirk)? And should the SDCA fallback go in at all, or is 8EB4 strictly a BIOS matter?

Supporting material (ACPI dumps, Windows-side comparison, UCM files): https://github.com/kaseyprichard/hp-omnibook-tas2783-sdw

On the HP OmniBook Ultra 14 (board 8EB4, Panther Lake) the four TI
TAS2783 SmartAmp peripherals declare the SDCA Function Topology control
(0x05) with access mode 0x03 and no mipi-sdca-control-dc-value, so
find_sdca_function() rejects them ("function type only supported as
DisCo constant"). No SmartAmp function is created, no speaker DAI
exists and the internal speakers are silent. The RT712 on link 3 does
provide a DC value and is unaffected.

The same firmware defect was reported for the HP EliteBook X in
thesofproject#5760, where the conclusion was that the BIOS should
supply a DC value, and HP fixed that machine with a BIOS update. The
newest BIOS for 8EB4 (F.06, 2026-06-25) still ships access mode 0x03
with no DC value for the amplifiers, so machines in the field need a
fallback. Keep it minimal: a table of known peripherals (TAS2783,
mfg 0x0102 part 0x0000, is always a SmartAmp) rather than reading the
control from hardware, so functions can still be parsed before the
device is available. Happy to drop this if HP commits to a BIOS fix
for 8EB4.

Link: thesofproject#5732
Link: thesofproject#5760
Assisted-by: Claude:claude-fable-5
Signed-off-by: Kasey Prichard <kasey.prichard@gmail.com>
The HP OmniBook Ultra 14 (board 8EB4, Panther Lake, BIOS F.06) has four
TI TAS2783 SmartAmp peripherals, two each on SoundWire links 1 and 2.
The static DSDT declares intel-sdw-doais = 1 and intel-sdw-doaise2 = 1
for every link, but SNDW._INI then runs DCFG() on each LNKn package and
overwrites those entries from NVS bytes (DAIn, DAXn, ...), and the
values the driver actually reads are doais = 3, doaise2 = 0. With that
ACTMCTL timing only one of the four amplifiers survives enumeration:
the other three attach, answer DEVID reads, then drop off the bus
within a few hundred ms and never come back, so there is no speaker
output on Linux. Windows drives all four amplifiers on the same
firmware.

Bisecting the ACTMCTL fields at runtime shows that DOAIS = 1 together
with DOAISE2 = 1 is both necessary and sufficient: with that pair all
four amplifiers attach, download firmware on the first attempt and stay
attached with no parity errors, and all four speakers play. DODS, CLDS
and CLDE make no difference. DOAISE2 gates whether DOAIS is honoured,
so neither field alone helps.

Add a DMI-keyed override for the ACTMCTL fields, applied after the
_DSD properties are read, and use it to force DOAIS = 1 / DOAISE2 = 1
on links 1 and 2 of this board. Other links and other boards are
untouched.

Link: thesofproject#5732
Assisted-by: Claude:claude-fable-5
Signed-off-by: Kasey Prichard <kasey.prichard@gmail.com>
@sofci

sofci commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Can one of the admins verify this patch?

reply test this please to run this test once

@bardliao

Copy link
Copy Markdown
Collaborator

I am pretty sure this will be fixed in the BIOS. @niranjanhyti @jim-monkey FYI

@niranjanhyti

Copy link
Copy Markdown

@jimxbj-dot (@jim-monkey) now supporting tas2783a - Jim please comment.

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.

4 participants