Re: [PATCH 2/2] ALSA: hda: cs35l41: Add support for Alienware x16 R2
From: Stefan Binding
Date: Thu Jul 02 2026 - 11:28:00 EST
Hi,
My understanding about this laptop is that it is actually a 4 speaker laptop, but the ACPI only has 2 SPI resources, which makes is very difficult to support.
I think the values used in cs35l41_hda_property.c are also not correct.
If you create a bugzilla ticket at the below address and CC Cirrus Patches (patches@xxxxxxxxxxxxxxxxxxxxx <mailto:patches@xxxxxxxxxxxxxxxxxxxxx>) to it, we will investigate as soon as we can.
https://bugzilla.kernel.org/ <https://bugzilla.kernel.org/>
Please attach an acpi dump and dmesg to the ticket.
Creating a public Bugzilla allows others with the same laptop to find relevant information pertaining to this issue.
Thanks,
Stefan
On 02/07/2026 15:41, Vadim Lysenko wrote:
> The Alienware x16 R2 (Dell subsystem 0x1028:0x0c90) has two CS35L41
> amplifiers on SPI described by an ACPI CSC3551 device, but the
> firmware provides no _DSD properties, so the amplifiers fail to probe:
>
> spi_master spi0: error -EINVAL: failed to add SPI device CSC3551:00
> serial-multi-instantiate CSC3551:00: probe failed with error -22
>
> Add a cs35l41_config entry so the driver supplies the missing
> properties. The values were derived from the machine's ACPI _CRS and
> validated on hardware:
>
> - 2 amps, left/right, shared reset on GpioIo index 1
> (kernel reports "Reset line busy, assuming shared reset")
> - speaker-id on GpioIo index 5 (driver reads SPKID: 1)
> - chip-select on GpioIo index 0 for the second amp; this lets both
> amplifiers enumerate ("Instantiated 2 SPI devices")
> - internal boost, matching the sibling Dell 0x0b27/0x0b28 entries;
> both amplifiers then identify as CS35L41 rev B2 and play with no
> boost faults
>
> After this change both amplifiers bind to the ALC289 codec (see the
> realtek quirk) and the internal speakers work.
>
> Signed-off-by: Vadim Lysenko <vadim.lysenko.ua@xxxxxxxxxx>
> ---
> sound/hda/codecs/side-codecs/cs35l41_hda_property.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/sound/hda/codecs/side-codecs/cs35l41_hda_property.c b/sound/hda/codecs/side-codecs/cs35l41_hda_property.c
> index 416d7bf3e..de70d511c 100644
> --- a/sound/hda/codecs/side-codecs/cs35l41_hda_property.c
> +++ b/sound/hda/codecs/side-codecs/cs35l41_hda_property.c
> @@ -38,6 +38,7 @@ static const struct cs35l41_config cs35l41_config_table[] = {
> { "10280B28", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
> { "10280BEB", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 0, 0, 0 },
> { "10280C4D", 4, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, CS35L41_LEFT, CS35L41_RIGHT }, 0, 1, -1, 1000, 4500, 24 },
> + { "10280C90", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 5, 0, 1000, 4500, 24 },
> /*
> * Device 103C89C6 does have _DSD, however it is setup to use the wrong boost type.
> * We can override the _DSD to correct the boost type here.
> @@ -470,6 +471,7 @@ static const struct cs35l41_prop_model cs35l41_prop_model_table[] = {
> { "CSC3551", "10280B28", generic_dsd_config },
> { "CSC3551", "10280BEB", generic_dsd_config },
> { "CSC3551", "10280C4D", generic_dsd_config },
> + { "CSC3551", "10280C90", generic_dsd_config },
> { "CSC3551", "103C89C6", generic_dsd_config },
> { "CSC3551", "103C8A28", generic_dsd_config },
> { "CSC3551", "103C8A29", generic_dsd_config },