Re: ACP7.0 SoundWire: two TAS2783 amps, only one channel reproduced?
Ville Saarinen <[email protected]>
| Newsgroups | org.kernel.vger.linux-sound |
|---|---|
| Message-ID | <[email protected]> |
Same machine here, same link/uid map, so some of this is already done.
The two changes you are carrying are upstream as of yesterday, in
broonie/sound.git for-7.3:
8393e0bf593b ASoC: amd: acp-config: force SoundWire probe on HP
OmniBook X Flip 14
b48466e4be18 ASoC: amd: acp70: add HP OmniBook X Flip 14 SoundWire
machine
You can drop your local pair.
The channel problem is not an adr layout problem, which is why none of
your three arrangements moved it. snd_sdw_params_to_config() hands both
amps ch_mask 0x3 on a 2-channel stream, and sdw_compute_slave_ports()
treats a slave whose mask covers the whole stream as mirror mode: it
resets the payload block offset for the next slave. Both amps end up on
the same offset and render the same samples. On the wire that shows as
DP1_CHANNELEN 0x03 and DP1_OFFSETCTRL1 0x41 reading identically on the
two amps during playback. group_position never reaches that allocation,
so no layout can change it.
The lever is ch_mask. An amp that claims one channel drops the pair out
of mirror mode and the core assigns consecutive offsets. Worth knowing
what that does and does not give you: sdw_compute_slave_ports() advances
by hweight32(ch_mask), the popcount only, never which bit is set, so you
can choose whether an amp takes one channel or mirrors, but not which
channel it takes. Which side each amp lands on is fixed by slave
iteration order, i.e. codec order in the dai_link -- so your adr array
does decide L/R, just not whether the split happens at all.
The SDCA control that ought to do this on the device, the UDMPU23
Cluster Index, I could not get to take: reads and writes both come back
-ENODATA in every state I tried. That return does not distinguish
"ignored" from "not implemented", so treat it as unresolved rather than
as a finding.
Don't take this from my patch -- I withdrew that series. The live work
is Robin Everaars' report,
https://lore.kernel.org/all/[email protected]/
and Antoine Monnet's patch doing the same split keyed off name_prefix,
<[email protected]>, which has a Tested-by
from Andrey Golovko on a second machine. Both predate mine.
For the ticket question: the residue here is codec-side, not ACP.
Ville