Re: [BUG] ASoC: tas2783-sdw: every amp on the link selects the same channel, so a two-amp board plays mono
Andrey Golovko <[email protected]>
| Newsgroups | org.kernel.vger.linux-sound,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 8/6/26 22:30, Pierre-Louis Bossart wrote: > Maybe the mapping is implicit and defined by the Unique Number > > I am not sure though how that Unique Number maps to the -1 and -2 suffix > > sdw:0:1:0102:0000:01:8 TAS2783, device_number 3, slave-tas2783 > sdw:0:1:0102:0000:01:b TAS2783, device_number 2, slave-tas2783 > > which one is left and which one is right? Measured on a second HN7306EAC (I'm the andrey.golovko in Cc - same machine, same two amps at unique ID 0x8/0xB): 0x8 is the left speaker, 0xB the right. Confirmed by muting each amp's volume control in turn, and by speaker-test with a per-amp one-channel mask applied: channel 1 comes out of the physically left speaker only, channel 2 out of the right only. That matches Robin's amp 1 = left, amp 2 = right. The Unique Number to -1/-2 suffix mapping is not implicit - it is hardcoded in the kernel's machine descriptor. amd-acp70-acpi-match.c has, for exactly this platform (rt721_l1u0_tas2783x2_l1u8b_adr): .adr = 0x0001380102000001 -> .name_prefix = "tas2783-1", spk_l_endpoint .adr = 0x00013B0102000001 -> .name_prefix = "tas2783-2", spk_r_endpoint where spk_l_endpoint/spk_r_endpoint are aggregated endpoints with group_position 0 and 1. So a channel-to-peripheral binding does exist in the tree, keyed off the _ADR unique ID and complete with a left/right position - it is just not plumbed into playback port allocation: nothing turns group_position into a per-peripheral mask or offset. device_number (2/3 here) is attach order and indeed cannot be relied on; the unique ID via the match table can. For cross-reference: the same mono issue on this machine was reported in July by Antoine Monnet (added to Cc), with an inline patch of the same shape as Robin's - per-amp one-channel mask derived from the name_prefix suffix: https://lore.kernel.org/all/[email protected]/ I have been running it since late July with correct physical L/R on my unit (Tested-by in that thread). Robin's finding that the mask value is ignored and only its weight matters applies to that patch equally: it works because the DAI-link codec order follows the adr_d table order above, which happens to match the speakers. Given that the descriptor already carries group_position per unique ID, deriving the assignment from that rather than from parsing the name_prefix suffix looks like the natural fix, and it would keep working if enumeration order ever changed. Thanks, Andrey