[PATCH 2/2] ALSA: hda: cs35l41: Add support for Alienware x16 R2

From: Vadim Lysenko

Date: Thu Jul 02 2026 - 10:54:11 EST


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 },
--
2.54.0