RE: [PATCH v1] ASoC: Intel: sof_sdw: Add ASUS UX5406AA SoundWire configuration
"Liao, Bard" <[email protected]>
| Newsgroups | gmane.linux.sound,gmane.linux.kernel |
|---|---|
| Message-ID | <SJ2PR11MB8424F5F50192D5E5F7F8345AFFDC2@SJ2PR11MB8424.namprd11.prod.outlook.com> |
> -----Original Message----- > From: Denys Papushaiev <[email protected]> > Sent: Wednesday, August 12, 2026 4:58 AM > To: Rojewski, Cezary <[email protected]>; > [email protected]; [email protected]; > [email protected]; [email protected] > Cc: [email protected]; [email protected]; linux- > [email protected]; [email protected]; Denys Papushaiev > <[email protected]> > Subject: [PATCH v1] ASoC: Intel: sof_sdw: Add ASUS UX5406AA SoundWire > configuration > > The ASUS ZenBook S14 UX5406AA has a CS42L43 codec on SoundWire link 3 > and four CS35L56 speaker amplifiers on links 1 and 2. > > The existing machine table only describes the CS35L56 amplifiers on link 2. As > a result, the machine configuration is not matched and SOF falls back to > function topology enumeration. That fallback creates duplicate DAI link names > and prevents the audio card from being initialized. It is likely there is a ghost SoundWire device in the ACPI table. Below commit covered the UX5406AA SKU 4dab2b904414 ("soundwire: dmi-quirks: Disable ghost Realtek devices") Could you check if it works for you? > > Add the missing SoundWire ADR entries and aggregated speaker endpoints for > the two CS35L56 amplifiers on link 1. Add a machine-table entry matching > links 1, 2 and 3 and reuse the existing CS42L43/CS35L56 topology. > > Tested on an ASUS ZenBook S14 UX5406AA with kernel 7.1.8-arch1-3. The > SOF card initializes successfully and all four CS35L56 amplifiers are detected > and calibrated. > > Signed-off-by: Denys Papushaiev <[email protected]> > --- > .../intel/common/soc-acpi-intel-ptl-match.c | 67 +++++++++++++++++++ > 1 file changed, 67 insertions(+) > > diff --git a/sound/soc/intel/common/soc-acpi-intel-ptl-match.c > b/sound/soc/intel/common/soc-acpi-intel-ptl-match.c > index f7694b2a2b02..b62a946062e4 100644 > --- a/sound/soc/intel/common/soc-acpi-intel-ptl-match.c > +++ b/sound/soc/intel/common/soc-acpi-intel-ptl-match.c > @@ -92,6 +92,21 @@ static const struct snd_soc_acpi_endpoint > spk_r_endpoint = { > .group_id = 1, > }; > > +/* Endpoints for 4-channel CS35L56 configurations (e.g. ASUS ZenBook > UX5406AA) */ > +static const struct snd_soc_acpi_endpoint spk_3_endpoint = { > + .num = 0, > + .aggregated = 1, > + .group_position = 2, > + .group_id = 1, > +}; > + > +static const struct snd_soc_acpi_endpoint spk_4_endpoint = { > + .num = 0, > + .aggregated = 1, > + .group_position = 3, > + .group_id = 1, > +}; > + > static const struct snd_soc_acpi_endpoint jack_dmic_endpoints[] = { > /* Jack Endpoint */ > { > @@ -184,6 +199,26 @@ static const struct snd_soc_acpi_adr_device > cs35l56_2_lr_adr[] = { > } > }; > > +/* > + * ASUS ZenBook S14 UX5406AA (Panther Lake) has 4x CS35L56 amps: > + * 2 amps on SoundWire link 1 (unique_id 2 and 3) > + * 2 amps on SoundWire link 2 (unique_id 0 and 1) > + */ > +static const struct snd_soc_acpi_adr_device cs35l56_1_lr_adr[] = { > + { > + .adr = 0x00013201fa355601ull, > + .num_endpoints = 1, > + .endpoints = &spk_3_endpoint, > + .name_prefix = "AMP3" > + }, > + { > + .adr = 0x00013301fa355601ull, > + .num_endpoints = 1, > + .endpoints = &spk_4_endpoint, > + .name_prefix = "AMP4" > + } > +}; > + > static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { > { > .adr = 0x000030025D071101ull, > @@ -315,6 +350,30 @@ static const struct snd_soc_acpi_link_adr > ptl_cs42l43_agg_l3_cs35l56_l2[] = { > {} > }; > > +/* > + * ASUS ZenBook S14 UX5406AA: CS42L43 on link 3, CS35L56 x4 on links 1 > and 2. > + * Link 1 carries AMP3 (uid=2) and AMP4 (uid=3). > + * Link 2 carries AMP1 (uid=0) and AMP2 (uid=1). > + */ > +static const struct snd_soc_acpi_link_adr ptl_cs42l43_agg_l3_cs35l56_l12[] = > { > + { > + .mask = BIT(3), > + .num_adr = ARRAY_SIZE(cs42l43_3_agg_adr), > + .adr_d = cs42l43_3_agg_adr, > + }, > + { > + .mask = BIT(2), > + .num_adr = ARRAY_SIZE(cs35l56_2_lr_adr), > + .adr_d = cs35l56_2_lr_adr, > + }, > + { > + .mask = BIT(1), > + .num_adr = ARRAY_SIZE(cs35l56_1_lr_adr), > + .adr_d = cs35l56_1_lr_adr, > + }, > + {} > +}; > + > static const struct snd_soc_acpi_link_adr ptl_rt722_l0_rt1320_l23[] = { > { > .mask = BIT(0), > @@ -510,6 +569,14 @@ struct snd_soc_acpi_mach > snd_soc_acpi_intel_ptl_sdw_machines[] = { > .sof_tplg_filename = "sof-ptl-rt712-l3-rt1320-l2.tplg", > .get_function_tplg_files = sof_sdw_get_tplg_files, > }, > + { > + /* ASUS ZenBook S14 UX5406AA (Panther Lake): 4x CS35L56 > */ > + /* on links 1+2, CS42L43 on link 3 */ > + .link_mask = BIT(1) | BIT(2) | BIT(3), > + .links = ptl_cs42l43_agg_l3_cs35l56_l12, > + .drv_name = "sof_sdw", > + .sof_tplg_filename = "sof-ptl-cs42l43-agg-l3-cs35l56-l2.tplg", > + }, > { > .link_mask = BIT(2) | BIT(3), > .links = ptl_cs42l43_agg_l3_cs35l56_l2, > -- > 2.55.0 >