Re: [BUG] ASoC: tas2783-sdw: every amp on the link selects the same channel, so a two-amp board plays mono
Pierre-Louis Bossart <[email protected]> Thu, 6 Aug 2026 10:47:49 +0200
| Newsgroups | org.kernel.vger.linux-sound |
|---|---|
| Message-ID | <[email protected]> |
> Confirmed fix, measured on this hardware > ======================================== > > Writing PPU21 selector 0x10 per amp does fix it. I derive the value from > component->name_prefix, so tas2783-1 and -3 get 0x01 (Left) and -2 and -4 > get 0x04 (Right), matching the mapping asoc_sdw_ti_spk_rtd_init() already > applies in sound/soc/sdw_utils/soc_sdw_ti_amp.c. you mentioned a two-amp board but the wording seems to describe 4 amps? Also not sure what mapping you are referring to, I looked up the code and couldn't connect the dots between the last sentence and the code. > Acoustic result on the same measurement rig as above, right channel only: > > before +0.4 dB over the noise floor, i.e. silence > after +70.7 dB, and the left/right imbalance is 0.3 dB > > It also survives an s2idle cycle, which matters here: a driver re-bind re- > runs tas2783_init_seq and would put 0x01 back, so the value has to be re- > asserted rather than written once. I do it from the POST_PMU path for that > reason. This may work but that isn't the intended role of the PPU (Posture Processing Unit). The spec says " PostureNumber (PPU) This Control is provided in the PPU for selecting the pre-defined mapping between input Channels and output Channels and applying any Posture-related processing. " In theory the *same* posture number should be given to both amps, and they shall modify their input to output mapping accordingly. For aggregated amps (which is the case here), the spec also says the PostureNumber register needs to be dual-ranked for synchronous changes but that part isn't managed by the SoundWire/SDCA core just yet.