Skip to content

Instantly share code, notes, and snippets.

@lamperez
Last active April 20, 2025 14:37
Show Gist options
  • Save lamperez/862763881c0e1c812392b5574727f6ff to your computer and use it in GitHub Desktop.
Save lamperez/862763881c0e1c812392b5574727f6ff to your computer and use it in GitHub Desktop.
CS35L41 amplifiers in an ASUS Zenbook on linux

Asus Zenbook UX3402 speakers on Linux

Important

THIS IS NOW OBSOLETE WITH KERNEL VERSIONS ≥ 6.7.0

A recent announcement in the kernel mail list by Cirrus developers will solve the problem described here. Therefore, the proposed solutions will be soon obsolete. See this comment (thanks, @flukejones, for the tip).

I got the speakers working on my Asus Zenbook 14 OLED UX3402, the one with Intel CPU and the two CS35L41 audio amplifiers connected over SPI (not the UM3402YA, with AMD and I²C). The amplifiers are supported by the snd_hda_scodec_cs35l41 module in recent kernel versions, but they require some model-specific configuration paramaters, that should be provided by the BIOS, via ACPI. Of course, they are missing. It seems that the Windows drivers have those parameters somehow hardcoded, instead of using ACPI (bad idea, but who am I to criticise). Since Asus has been nasty and refused/was not able to update the BIOS with the missing data, I have patched the ACPI tables myself.

Warning

As stated by Cirrus developers, if you try this there is a non-zero (low, I hope) possibility of blowing your speakers. Take into account that this procedure is not just configuring your box, it is hardware-level hacking with very scarce information about the hardware (thank you, ASUS, and thank you, Cirrus, for not publishing the CS35L41 datasheet and making it only available by request). Additionally, You should know how to work with DSDT or SSDT files (I have a brief guide here) and how to recover from a non booting system. You are on your own. You have been warned.

Note

I have used the patch for some months, and everything seems OK. As you can see, the most recent versions do not require electrical parameters to be specified, just providing the functions of several GPIO pins, that are already present in the original BIOS, and the behavior associated to them. I am almost sure that the patch is totally safe.

My BIOS is the most recent one (version 310). I have added two _DSD objects in the SSDT file (ssdt_csc3551.dsl, or its already assembled version, ssdt_csc3551.aml):

  • One inside the SPK1 device, providing the missing "cirrus,dev-index" and other properties, just like the I2C models. You can also provide these properties by patching the kernel module (the linux/sound/pci/hda/cs35l41_hda.c file).

  • Another one, after the SPK1 device, with the chip select GPIOs, "cs-gpios", required by the SPI bus (the somehow simpler I²C bus does not use chip select pins, but addresses). Without this _DSD object, only one amplifier can be addressed and activated. In this case, the driver refuses to load even for this single working amplifier.

Obsolete: DSDT patch

Instead of applying a SSDT file, you may patch the full DSDT dissassembled DSDT file (dsdt.dsl). This was my original solution (thanks to @thor2002ro for pointing to the simpler, nicer SSDT solution, see the comment, especially if you use grub). The patch is available for reference, just apply the SSDT file.

Obsolete: internal boost

I keep the old, original patch, that produced AMP short error messages when the volume was high enough, for reference. Please try first the simpler patch with external boost, that seems to work without flaws (thanks to @bdandy, see the comment).

Boot log

Output from journalctl -b -g CSC3551 --output short-monotonic after the old patch:

[5.358062] zenbook kernel: Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 SPI devices.
[5.643640] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Cirrus Logic CS35L41 (35a40), Revision: B2
[5.680302] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Cirrus Logic CS35L41 (35a40), Revision: B2
[5.996217] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Falling back to default firmware.
[5.996608] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: Firmware version: 3
[5.996611] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: Fri 24 Jun 2022 14:55:56 GMT Daylight Time
[6.069598] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0, 2 algorithms
[6.070173] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: 0: ID cd v29.78.0 XM@94 YM@e
[6.070185] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: 1: ID f20b v0.1.0 XM@17c YM@0
[6.070192] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: spk-prot: e:\workspace\workspace\tibranch_release_playback_6.76_2\ormis\staging\default_tunings\internal\CS35L53\Fixed_Attenuation_Mono_48000_29.78.0\full\Fixed_Attenuation_Mono_48000_29.78.0_full.bin
[6.083485] zenbook kernel: snd_hda_codec_realtek ehdaudio0D0: bound spi1-CSC3551:00-cs35l41-hda.0 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])
[6.083899] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Falling back to default firmware.
[6.083962] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: Firmware version: 3
[6.083966] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: Fri 24 Jun 2022 14:55:56 GMT Daylight Time
[6.145224] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0, 2 algorithms
[6.145817] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: 0: ID cd v29.78.0 XM@94 YM@e
[6.145828] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: 1: ID f20b v0.1.0 XM@17c YM@0
[6.145834] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: spk-prot: e:\workspace\workspace\tibranch_release_playback_6.76_2\ormis\staging\default_tunings\internal\CS35L53\Fixed_Attenuation_Mono_48000_29.78.0\full\Fixed_Attenuation_Mono_48000_29.78.0_full.bin
[6.161484] zenbook kernel: snd_hda_codec_realtek ehdaudio0D0: bound spi1-CSC3551:00-cs35l41-hda.1 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])

The "Falling back to default firmware" disappears if spk-id-gpios are provided (the block is commented in the patch). As a result, a different firmware is loaded, resulting in very low volume and strong distortion. If the new patch is used, that uses external boost, the sound is correct, and the log is

[0.004000] zenbook kernel: ACPI: Table Upgrade: install [SSDT-CUSTOM- CSC3551]
[0.004000] zenbook kernel: ACPI: SSDT 0x00000000368FD000 0001A0 (v01 CUSTOM CSC3551  00000001 INTL 20200925)
[5.607253] zenbook kernel: Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 SPI devices.
[5.906936] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Cirrus Logic CS35L41 (35a40), Revision: B2
[5.907354] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Reset line busy, assuming shared reset
[5.938136] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Cirrus Logic CS35L41 (35a40), Revision: B2
[6.239406] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: Firmware version: 3
[6.239415] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431e02.wmfw: Fri 27 Aug 2021 14:58:19 W. Europe Daylight Time
[6.313109] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: Firmware: 400a4 vendor: 0x2 v0.43.1, 2 algorithms
[6.313524] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: 0: ID cd v29.63.1 XM@94 YM@e
[6.313530] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: 1: ID f20b v0.1.0 XM@176 YM@0
[6.313535] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: spk-prot: C:\Users\tyang\Desktop\Product Setting\SmartAMP\ASUS\ASUS_Zenbook\UX3402\Tuning Release\220304\ASUS_UX3402_L_tuning_IDYC_ReDc_PICL_RTL_0304.bin
[6.337211] zenbook kernel: snd_hda_codec_realtek ehdaudio0D0: bound spi1-CSC3551:00-cs35l41-hda.0 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])
[6.337534] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: Firmware version: 3
[6.337540] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431e02.wmfw: Fri 27 Aug 2021 14:58:19 W. Europe Daylight Time
[6.399070] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: Firmware: 400a4 vendor: 0x2 v0.43.1, 2 algorithms
[6.399612] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: 0: ID cd v29.63.1 XM@94 YM@e
[6.399623] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: 1: ID f20b v0.1.0 XM@176 YM@0
[6.399629] zenbook kernel: cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: spk-prot: C:\Users\tyang\Desktop\Product Setting\SmartAMP\ASUS\ASUS_Zenbook\UX3402\Tuning Release\220304\ASUS_UX3402_R_tuning_IDYC_ReDc_PICL_RTL_0304.bin
[6.427637] zenbook kernel: snd_hda_codec_realtek ehdaudio0D0: bound spi1-CSC3551:00-cs35l41-hda.1 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])
--- dsdt.dsl.old 2023-03-26 01:06:48.845795666 +0100
+++ dsdt.dsl 2023-03-26 12:00:45.643851841 +0200
@@ -18,7 +18,7 @@
* Compiler ID "INTL"
* Compiler Version 0x20200717 (538969879)
*/
-DefinitionBlock ("", "DSDT", 2, "_ASUS_", "Notebook", 0x01072009)
+DefinitionBlock ("", "DSDT", 2, "_ASUS_", "Notebook", 0x0107200A)
{
/*
* iASL Warning: There were 233 external control methods found during
@@ -90642,7 +90642,48 @@
Method (_DIS, 0, NotSerialized) // _DIS: Disable Device
{
}
+
+ Name (_DSD, Package () // _DSD: Device-Specific Data
+ {
+ ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+ Package ()
+ {
+ Package () { "cirrus,dev-index", Package () { Zero, One }},
+ Package () { "reset-gpios", Package () {
+ SPK1, One, Zero, Zero,
+ SPK1, One, Zero, Zero,
+ } },
+ // Package () { "spk-id-gpios", Package () {
+ // SPK1, 0x02, Zero, Zero,
+ // SPK1, 0x02, Zero, Zero,
+ // } },
+ Package () { "cirrus,speaker-position", Package () { Zero, One } },
+ Package () { "cirrus,gpio1-func", Package () { Zero, Zero } },
+ Package () { "cirrus,gpio2-func", Package () { 0x02, 0x02 } },
+ // boost-type: 0 internal, 1 external
+ Package () { "cirrus,boost-type", Package () { Zero, Zero } },
+ // boost-peak-milliamp: 1600 to 4500, increments of 50 mA
+ Package () { "cirrus,boost-peak-milliamp", Package () { 4500, 4500 } },
+ // boost-ind-nanohenry: 1000 | 1200 | 1500 | 2200 nH
+ Package () { "cirrus,boost-ind-nanohenry", Package () { 1000, 1000 } },
+ // boost-cap-microfarad: rounded to the nearest integer
+ Package () { "cirrus,boost-cap-microfarad", Package () { 24, 24 } },
+ },
+ })
}
+
+ Name (_DSD, Package ()
+ {
+ ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+ Package ()
+ {
+ Package () { "cs-gpios", Package () {
+ Zero, // Native CS
+ SPK1, Zero, Zero, Zero // GPIO CS
+ } }
+ }
+ })
+
}
Scope (_SB.PC00.LPCB)
--- dsdt.dsl.old 2023-03-26 01:06:48.845795666 +0100
+++ dsdt.dsl 2023-03-26 12:00:45.643851841 +0200
@@ -18,7 +18,7 @@
* Compiler ID "INTL"
* Compiler Version 0x20200717 (538969879)
*/
-DefinitionBlock ("", "DSDT", 2, "_ASUS_", "Notebook", 0x01072009)
+DefinitionBlock ("", "DSDT", 2, "_ASUS_", "Notebook", 0x0107200A)
{
/*
* iASL Warning: There were 233 external control methods found during
@@ -90642,7 +90642,43 @@
Method (_DIS, 0, NotSerialized) // _DIS: Disable Device
{
}
+
+ Name (_DSD, Package () // _DSD: Device-Specific Data
+ {
+ ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+ Package ()
+ {
+ Package () { "cirrus,dev-index", Package () { Zero, One }},
+ Package () { "reset-gpios", Package () {
+ SPK1, One, Zero, Zero,
+ SPK1, One, Zero, Zero,
+ } },
+ Package () { "spk-id-gpios", Package () {
+ SPK1, 0x02, Zero, Zero,
+ SPK1, 0x02, Zero, Zero,
+ } },
+ Package () { "cirrus,speaker-position", Package () { Zero, One } },
+ // gpioX-func: 0 not used, 1 VPSK_SWITCH, 2: INTERRUPT, 3: SYNC
+ Package () { "cirrus,gpio1-func", Package () { One, One } },
+ Package () { "cirrus,gpio2-func", Package () { 0x02, 0x02 } },
+ // boost-type: 0 internal, 1 external
+ Package () { "cirrus,boost-type", Package () { One, One } },
+ },
+ })
}
+
+ Name (_DSD, Package ()
+ {
+ ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
+ Package ()
+ {
+ Package () { "cs-gpios", Package () {
+ Zero, // Native CS
+ SPK1, Zero, Zero, Zero // GPIO CS
+ } }
+ }
+ })
+
}
Scope (_SB.PC00.LPCB)
DefinitionBlock ("", "SSDT", 1, "CUSTOM", "CSC3551", 0x00000001)
{
External (_SB_.PC00.SPI0, DeviceObj)
External (_SB_.PC00.SPI0.SPK1, DeviceObj)
Scope (_SB.PC00.SPI0.SPK1)
{
Name (_DSD, Package ()
{
ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "cirrus,dev-index", Package () { Zero, One }},
Package () { "reset-gpios", Package () {
SPK1, One, Zero, Zero,
SPK1, One, Zero, Zero
} },
Package () { "spk-id-gpios", Package () {
SPK1, 0x02, Zero, Zero,
SPK1, 0x02, Zero, Zero
} },
Package () { "cirrus,speaker-position", Package () { Zero, One } },
// gpioX-func: 0 not used, 1 VPSK_SWITCH, 2: INTERRUPT, 3: SYNC
Package () { "cirrus,gpio1-func", Package () { One, One } },
Package () { "cirrus,gpio2-func", Package () { 0x02, 0x02 } },
// boost-type: 0 internal, 1 external
Package () { "cirrus,boost-type", Package () { One, One } }
}
})
}
Scope (_SB.PC00.SPI0)
{
Name (_DSD, Package ()
{
ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package ()
{
Package () { "cs-gpios", Package () {
Zero, // Native CS
SPK1, Zero, Zero, Zero // GPIO CS
} }
}
})
}
}
@SalahAdDin
Copy link

try the kernel 6.9.9 or https://ubuntuforums.org/showthread.php?t=2497994&page=2&s=4f6cf9ee26d06f746ea4fbc30becd96f

I'm testing the release candidate on Manjaro.

@Annaiz11
Copy link

Horrible, crackling sound from speakers on the ASUS Zenbook Q529Z.

I guess I have tried everything I could find online to fix this. I tried KDE and Gnome on different distros (I am on KDE Manjaro, no dual boot), but the problem persists.

The patch in the kernel for my model seems to be:

SND_PCI_QUIRK (0x1043, 0x1da2, "ASUS UP6502ZA/ZD", ALC245_FIXUP_CS35L41_SPI_2)

with the difference that my particular laptop is on ALC294. Could this be what causes the problem?

@SalahAdDin
Copy link

try the kernel 6.9.9 or https://ubuntuforums.org/showthread.php?t=2497994&page=2&s=4f6cf9ee26d06f746ea4fbc30becd96f

I'm testing the release candidate on Manjaro.

Working in Linux 6.10

@Annaiz11
Copy link

try the kernel 6.9.9 or https://ubuntuforums.org/showthread.php?t=2497994&page=2&s=4f6cf9ee26d06f746ea4fbc30becd96f

I'm testing the release candidate on Manjaro.

Working in Linux 6.10

Thanks a lot. I am trying every new kernel released by Manjaro, was experimenting with symlinks, but none of them helped, so removed them.

The original entries in lib/firmware/cirrus for 1da2 look like this:
Screenshot_20240730_105944

Different solutions proposed here and there for ALC294 did not work either.

Sound seems to be clear only at an almost inaudible level, with a bit of volume up it gets very distorted.

@simplepoint1024
Copy link

hi,I also had issues with my ROG Strix SCAR 16 G634JZR, which is very quiet and gets distorted as the volume gets louder!

sudo dmesg |grep CSC3551

[    0.009760] ACPI: Table Upgrade: install [SSDT-CUSTOM- CSC3551]
[    0.009761] ACPI: SSDT 0x0000000039C33000 0001A0 (v01 CUSTOM CSC3551  00000001 INTL 20230628)
[    4.122780] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Adding DSD properties for 10433A60
[    4.122783] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Cannot add Reset/Speaker ID/SPI CS GPIO Mapping, _DSD already exists.
[    4.122784] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Cannot update SPI CS, _DSD already exists.
[    4.122947] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Using extra _DSD properties, bypassing _DSD in ACPI
[    4.122947] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Reset line busy, assuming shared reset
[    4.142200] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Cirrus Logic CS35L41 (35a40), Revision: B2
[    4.142436] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Adding DSD properties for 10433A60
[    4.142437] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Cannot add Reset/Speaker ID/SPI CS GPIO Mapping, _DSD already exists.
[    4.142437] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Cannot update SPI CS, _DSD already exists.
[    4.142538] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Using extra _DSD properties, bypassing _DSD in ACPI
[    4.142539] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Reset line busy, assuming shared reset
[    4.164755] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Cirrus Logic CS35L41 (35a40), Revision: B2
[    4.164764] Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 SPI devices.
[    4.168730] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Falling back to default firmware.
[    4.169155] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: Firmware version: 3
[    4.169157] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: Fri 24 Jun 2022 14:55:56 GMT Daylight Time
[    4.230204] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0, 2 algorithms
[    4.230792] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.bin: v0.58.0
[    4.230794] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: spk-prot: e:\workspace\workspace\tibranch_release_playback_6.76_2\ormis\staging\default_tunings\internal\CS35L53\Fixed_Attenuation_Mono_48000_29.78.0\full\Fixed_Attenuation_Mono_48000_29.78.0_full.bin
[    4.241936] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Firmware Loaded - Type: spk-prot, Gain: 17
[    4.242025] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: CS35L41 Bound - SSID: 10433A60, BST: 0, VSPK: 0, CH: L, FW EN: 1, SPKID: 1
[    4.242033] snd_hda_codec_realtek hdaudioC0D0: bound spi1-CSC3551:00-cs35l41-hda.0 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])
[    4.242275] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Falling back to default firmware.
[    4.242647] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: Firmware version: 3
[    4.242652] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: Fri 24 Jun 2022 14:55:56 GMT Daylight Time
[    4.304303] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0, 2 algorithms
[    4.305169] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot.bin: v0.58.0
[    4.305180] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: DSP1: spk-prot: e:\workspace\workspace\tibranch_release_playback_6.76_2\ormis\staging\default_tunings\internal\CS35L53\Fixed_Attenuation_Mono_48000_29.78.0\full\Fixed_Attenuation_Mono_48000_29.78.0_full.bin
[    4.320124] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Firmware Loaded - Type: spk-prot, Gain: 17
[    4.320208] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: CS35L41 Bound - SSID: 10433A60, BST: 0, VSPK: 0, CH: R, FW EN: 1, SPKID: 1
[    4.320215] snd_hda_codec_realtek hdaudioC0D0: bound spi1-CSC3551:00-cs35l41-hda.1 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])

dsdt.dsl

Scope (_SB.PC00.SPI3)
    {
        Device (SPK1)
        {
            OperationRegion (GH16, SystemMemory, 0xE06D0A00, 0x10)
            Field (GH16, ByteAcc, Lock, Preserve)
            {
                    ,   1, 
                IH16,   1
            }

            Name (_HID, "CSC3551")  // _HID: Hardware ID
            Method (_SUB, 0, NotSerialized)  // _SUB: Subsystem ID
            {
                If ((IH16 == One))
                {
                    Return ("10433A60")
                }
                Else
                {
                    Return ("10433A20")
                }
            }

            Name (_UID, One)  // _UID: Unique ID
            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                Name (SBUF, ResourceTemplate ()
                {
                    SpiSerialBusV2 (0x0000, PolarityLow, FourWireMode, 0x08,
                        ControllerInitiated, 0x003D0900, ClockPolarityLow,
                        ClockPhaseFirst, "\\_SB.PC00.SPI3",
                        0x00, ResourceConsumer, , Exclusive,
                        )
                    SpiSerialBusV2 (0x0001, PolarityLow, FourWireMode, 0x08,
                        ControllerInitiated, 0x003D0900, ClockPolarityLow,
                        ClockPhaseFirst, "\\_SB.PC00.SPI3",
                        0x00, ResourceConsumer, , Exclusive,
                        )
                    GpioIo (Exclusive, PullUp, 0x0000, 0x0000, IoRestrictionOutputOnly,
                        "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                        )
                        {   // Pin list
                            0x01D4
                        }
                    GpioIo (Exclusive, PullDown, 0x0000, 0x0000, IoRestrictionOutputOnly,
                        "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                        )
                        {   // Pin list
                            0x0140
                        }
                    GpioIo (Exclusive, PullUp, 0x0000, 0x0000, IoRestrictionInputOnly,
                        "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                        )
                        {   // Pin list
                            0x00C0
                        }
                    GpioIo (Shared, PullUp, 0x0064, 0x0000, IoRestrictionInputOnly,
                        "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                        )
                        {   // Pin list
                            0x0141
                        }
                    GpioInt (Edge, ActiveBoth, Shared, PullUp, 0x0064,
                        "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                        )
                        {   // Pin list
                            0x0141
                        }
                })
                Return (SBUF) /* \_SB_.PC00.SPI3.SPK1._CRS.SBUF */
            }

            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                Return (0x0F)
            }

            Method (_DIS, 0, NotSerialized)  // _DIS: Disable Device
            {
            }
        }
    }

cirrus_ssdt_patch.dsl

DefinitionBlock ("", "SSDT", 1, "CUSTOM", "CSC3551", 0x00000001)
{
    External (_SB_.PC00.SPI3, DeviceObj)
    External (_SB_.PC00.SPI3.SPK1, DeviceObj)

    Scope (_SB.PC00.SPI3.SPK1)
    {
        Name (_DSD, Package ()   // _DSD: Device-Specific Data
        {
            ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
            Package ()
            {
                Package () { "cirrus,dev-index", Package () { Zero, One }},
                Package () { "reset-gpios", Package () {
					SPK1, Zero, Zero, Zero,
					SPK1, Zero, Zero, Zero,
                } },
                Package () { "spk-id-gpios", Package () {
					SPK1, 0x02, Zero, Zero,
					SPK1, 0x02, Zero, Zero,
                } },
                Package () { "cirrus,speaker-position",     Package () { Zero, One } },
                // gpioX-func: 0 not used, 1 VPSK_SWITCH, 2: INTERRUPT, 3: SYNC
                Package () { "cirrus,gpio1-func",           Package () { One, One } },
                Package () { "cirrus,gpio2-func",           Package () { 0x02, 0x02 } },
                // boost-type: 0 internal, 1 external
                Package () { "cirrus,boost-type",           Package () { One, One } },
            },
        })
    }

    Scope (_SB.PC00.SPI3)
    {
        Name (_DSD, Package ()
        {
            ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
            Package ()
            {
                Package () { "cs-gpios", Package () {
                    Zero,                    // Native CS
                    SPK1, Zero, Zero, Zero   // GPIO CS
                } }
            }
        })
    }
}

ASUSTeK COMPUTER INC. ROG Strix SCAR 16 G634JZR
OS: Arch Linux
Kernel Version: Linux 6.10.3-zen1-2-zen
Firmware Version : G634JZR.316

@flukejones
Copy link

@159356-1702-Extramural your laptop is patched in upstream kernel (my patch was accepted last week). This should be in next 6.10 version, and in 6.11-RC3. You will need latest firmware.

@ninja-
Copy link

ninja- commented Aug 28, 2024

I am getting bad sound quality on latest kernel unless the volume is low(<50%), I am runing mainline kernel.

the volume at >50% feels ok, but it starts getting a bit of crackling and bass which makes human voice annoying in audio calls
(or maybe I am just imagining it and that's just the way this hardware is supposed to work, I wiped Windows so I can't compare)

My active quirk in mainline is

SND_PCI_QUIRK(0x1043, 0x1c03, "ASUS UM3406HA", ALC287_FIXUP_CS35L41_I2C_2)

Is there something else that can be done or was done to similar machines?

[121739.231216] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431c03.wmfw: format 3 timestamp 0x64269d09
[121739.231230] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431c03.wmfw: Fri 31 Mar 2023 10:42:49 W. Europe Daylight Time
[121739.549909] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: DSP1: Firmware: 400a4 vendor: 0x2 v0.65.0, 2 algorithms
[121739.584748] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431c03-spkid1-r0.bin: v0.65.0
[121739.584758] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: DSP1: spk-prot: C:\Users\tyang\Desktop\ProductSetting\UX3406\Tuning\01192024\Tuning\UM3406HA_Xmax0p6Redc6p7_Rch_Tuni
[121740.087612] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: Firmware: 400a4 vendor: 0x2 v0.65.0, 2 algorithms
[121740.089252] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431c03-spkid1-l0.bin: v0.65.0
[121740.089261] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: spk-prot: C:\Users\tyang\Desktop\ProductSetting\UX3406\Tuning\01192024\Tuning\UM3406HA_Xmax0p6Redc6p7_Lch_Tuni
[121740.171526] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Calibration applied: R0=9172
[121740.174720] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Calibration applied: R0=9117
[121740.194842] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Firmware Loaded - Type: spk-prot, Gain: 19
[121740.196769] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Firmware Loaded - Type: spk-prot, Gain: 19

@ninja-
Copy link

ninja- commented Aug 28, 2024

@ninja-
Copy link

ninja- commented Aug 28, 2024

the commit you were referring to is probably torvalds/linux@e6e1802

would ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS be a better quirk for my hardware too by any chance?

@danee940
Copy link

danee940 commented Sep 8, 2024

Hi guys!

I tried to read the whole thread but sorry if missed out important info.

I have an UX3405MA, installed the following patch, but the audio is still really quiet.

https://github.com/smallcms/asus_zenbook_ux3405ma

Is there anything that can be done extra to fix this issue? I'm dual booting windows, on Windows it works miles better.

I'm on kernel 6.10.7-200.fc40.x86_64

@paul-ri
Copy link

paul-ri commented Sep 8, 2024

@danee940 , you'll get answers on this thread for the UX3405: smallcms/asus_zenbook_ux3405ma#7

tldr; wait for the Linux kernel 6.11 to come out, or build the kernel with the patch mentioned there.

@danee940
Copy link

danee940 commented Sep 9, 2024

Thank you @paul-ri !

I think I'll wait for the next kernel. But hope is not lost, that's great!

@radupotop
Copy link

Trying to patch an Asus ExpertBook P5405 using SSDT table upgrades with no luck.

journalctl -b -1 | grep -i csc3551

ACPI: SSDT ACPI table found in initrd [kernel/firmware/acpi/ssdt_csc3551.aml][0x1a0]
ACPI: Table Upgrade: install [SSDT-CUSTOM- CSC3551]
ACPI: SSDT 0x0000000058217000 0001A0 (v01 CUSTOM CSC3551  00000001 INTL 20230628)
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Cirrus Logic CS35L41 (35a40), Revision: B2
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Reset line busy, assuming shared reset
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Cirrus Logic CS35L41 (35a40), Revision: B2
Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 SPI devices.

It looks like it has two amps with a shared reset gpio. Not entirely sure what to do as my knowledge of iASL / ACPI is very limited.

My SSDT patch is below:

DefinitionBlock ("", "SSDT", 1, "CUSTOM", "CSC3551", 0x00000001)
{
    External (_SB_.PC00.SPI1, DeviceObj)
    External (_SB_.PC00.SPI1.SPK1, DeviceObj)

    Scope (_SB.PC00.SPI1.SPK1)
    {
        Name (_DSD, Package ()
        {
            ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
            Package ()
            {
                Package () { "cirrus,dev-index", Package () { Zero, One }},
                Package () { "reset-gpios", Package () {
                    SPK1, One, Zero, Zero,
                    SPK1, One, Zero, Zero
                } },
                Package () { "spk-id-gpios", Package () {
                    SPK1, 0x02, Zero, Zero,
                    SPK1, 0x02, Zero, Zero
                } },
                Package () { "cirrus,speaker-position", Package () { Zero, One } },
                // gpioX-func: 0 not used, 1 VPSK_SWITCH, 2: INTERRUPT, 3: SYNC
                Package () { "cirrus,gpio1-func", Package () { Zero, Zero } },
                Package () { "cirrus,gpio2-func", Package () { 0x02, 0x02 } },
                // boost-type: 0 internal, 1 external
                Package () { "cirrus,boost-type", Package () { Zero, Zero } }
            }
        })
    }

    Scope (_SB.PC00.SPI1)
    {
        Name (_DSD, Package ()
        {
            ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
            Package ()
            {
                Package () { "cs-gpios", Package () {
                    Zero,                    // Native CS
                    SPK1, Zero, Zero, Zero   // GPIO CS
                } }
            }
        })
    }
}

I tried changing reset-gpios to Zero, Zero Zero, still nothing.

If anyone has any ideas i would appreciate it. This is a very new model, not sure when it will be supported if ever.

@stiobhan
Copy link

stiobhan commented Nov 23, 2024

@radupotop I have the same model, and have everything working by now except for the speakers. For the Wi-Fi to work I had to compile a kernel from the latest git branch yesterday, the firmware showed up in linux-firmware git only a couple of days ago. Feel free to contact me if you have any questions on that part.

Wow, the patch you posted takes me back 20 years when I started with Linux and was writing ALSA configuration files to get my sound card to work properly... So, have you made any progress on the speakers?

@radupotop
Copy link

@stiobhan Thanks, it's the first time I'm hacking ACPI tables, so this is still very new to me. Up until now I've only used (older) Dell machines which worked fine out of the box with Linux.

I could not get the sound to work at all on the ExpertBook, which is a deal-breaker for me.
This is how far I've made it:

journalctl -b -1 | grep -i csc3551

ACPI: SSDT ACPI table found in initrd [kernel/firmware/acpi/ssdt_csc3551.aml][0x1a0]
ACPI: Table Upgrade: install [SSDT-CUSTOM- CSC3551]
ACPI: SSDT 0x0000000058217000 0001A0 (v01 CUSTOM CSC3551  00000001 INTL 20230628)
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Cirrus Logic CS35L41 (35a40), Revision: B2
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Reset line busy, assuming shared reset
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.1: Cirrus Logic CS35L41 (35a40), Revision: B2
Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 SPI devices.

Unfortunately I had to return the laptop.

I did notice the Wi-Fi issue as you mentioned -- but I imagine this is something that will get sorted once the iwlwifi-bz-b0-gf-a0-9x firmware gets merged upstream.

@tiaga
Copy link

tiaga commented Dec 16, 2024

Tested 3.5 mm jack phone headset (TRRS plug) once again with Asus UX3402VA and the latest Manjaro (6.12 kernel) but it's still doesn't work (microphone isn't working). The problem can be observed from the 6.5.0-17 kernel version (on Linux Mint) and above.

Diff between 6.5.0-15 and 6.5.0-17 is huge, so I have a lack of knowledge to find the root cause. If someone wants to collaborate and fix it, just let me know.

@crazybert
Copy link

crazybert commented Jan 18, 2025

Having similar issue with Alienware x16 R2 which seems to be using the same chip.
Running on 6.12.3

I guess I need to figure out how to tweak this fix for my HW, unless it is supposed to work out of the box...

SND_PCI_QUIRK(0x1043, 0x1c03, "ASUS UM3406HA", ALC287_FIXUP_CS35L41_I2C_2)

UPD: If anyone lands here looking for a fix for Alienware x16 R2- here's the remedy:

--- a/sound/pci/hda/patch_realtek.c     2025-01-19 00:45:16.892293301 -0600
+++ b/sound/pci/hda/patch_realtek.c     2025-01-19 00:30:29.321568421 -0600
@@ -10226,6 +10226,7 @@
        SND_PCI_QUIRK(0x1028, 0x0c1e, "Dell Precision 3540", ALC236_FIXUP_DELL_DUAL_CODECS),
        SND_PCI_QUIRK(0x1028, 0x0c28, "Dell Inspiron 16 Plus 7630", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS),
        SND_PCI_QUIRK(0x1028, 0x0c4d, "Dell", ALC287_FIXUP_CS35L41_I2C_4),
+       SND_PCI_QUIRK(0x1028, 0x0c90, "Alienware x16 R2", ALC289_FIXUP_DUAL_SPK),
        SND_PCI_QUIRK(0x1028, 0x0c94, "Dell Polaris 3 metal", ALC287_FIXUP_TAS2781_I2C),
        SND_PCI_QUIRK(0x1028, 0x0c96, "Dell Polaris 2in1", ALC287_FIXUP_TAS2781_I2C),
        SND_PCI_QUIRK(0x1028, 0x0cbd, "Dell Oasis 13 CS MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),

@LK7R
Copy link

LK7R commented Feb 20, 2025

@stiobhan @radupotop i have the same laptop ASUS EXPERTBOOK P5405CSA with latest BIOS P5405CSA.314 12/26/2024. I was able to get speakers working by patching and recompiling the <your_kernel_source_root>/sound/pci/hda/patch_realtek.c file with:
SND_PCI_QUIRK(0x1043, 0x1f63, "ASUS P5405CSA", ALC245_FIXUP_CS35L41_SPI_2),

Copied firmware files from Windows installation: C:\Windows\System32\DriverStore\FileRepository\csaudioext.inf_amd64_d6d4d68330f8c2d2\tunings\ASUS_P5405_10431F63_240605

Renamed files to:
10431F63_240603_V0_A0.bin -> cs35l41-dsp1-spk-prot-10431f63-r0.bin
10431F63_240531_V0_A1.bin -> cs35l41-dsp1-spk-prot-10431f63-l0.bin
10431F63_240603_V0_A0_cal.bin -> cs35l41-dsp1-spk-cali-10431f63-r0.bin
10431F63_240531_V0_A1_cal.bin -> cs35l41-dsp1-spk-cali-10431f63-l0.bin

Moved resulting files to:
/lib/firmware/cirrus/

Made links to correct .wmfw in the /lib/firmware/cirrus folder (multiple revisions of firmware avaliable, used the same as on Windows install):
ln -s cs35l41/v6.83.0/halo_cspl_RAM_revB2_29.85.0.wmfw cs35l41-dsp1-spk-prot-10431f63-l0.wmfw
ln -s cs35l41/v6.83.0/halo_cspl_RAM_revB2_29.85.0.wmfw cs35l41-dsp1-spk-prot-10431f63-r0.wmfw

Made links to chosen .bincfg in the /lib/firmware/cirrus folder (multiple configs available for 14,5/16,5/19,5dB, you can see it in the filename):
ln -s cs35l41/bincfgs/cs35l41-dsp1-14_5dB.bincfg cs35l41-dsp1-spk-prot-10431f63-l0.bincfg
ln -s cs35l41/bincfgs/cs35l41-dsp1-14_5dB.bincfg cs35l41-dsp1-spk-prot-10431f63-r0.bincfg

After that speakers works as expected. Thank you @lamperez for your work, it brought me to my solution.

@flukejones
Copy link

Can people please submit these simple one-line quirks upstream? It's very very simple to do and most often they are accepted quickly and merged to all stable releases too. See https://git-send-email.io/ for an excellent guide

@stiobhan
Copy link

@LK7R thank you so much for sharing! I was still waiting for Cirrus to push an update as someone from their team said "we're working on it". I'm rebuilding my kernel right now to test your patch. I already updated to BIOS 314 a while ago.

Regarding the firmware files, instead of bothering to boot Windows I got them from the driver package found on the Asus support site

Audio Driver Package(WIN11_24H2)
Version 04.00
602.59 MB
2025/02/15
SHA-256 :1AD6F08359AB2FEF2AC5F350E7D9885207398A848B27C2BF4BF4BC0B083906D1

It is a zip file and after extracting it the files can be found in SmartAMP/Cirrus/SmartAMP_Cirrus_CC_Cirrus_Z_V23.26.47.802_38730/csaudioext/tunings/ASUS_P5405_10431F63_240605.

@LK7R
Copy link

LK7R commented Feb 20, 2025

Updated my previous answer, there was L/R channel mixup and added link to .bincfg files that are included in cirrus firmware package. Also updated typo in .bincfg link pointed out by @stiobhan

@stiobhan
Copy link

@LK7R For me it worked already without the bincfg links. I think you still have a typo left there in the second last line:

ln -s cs35l41/bincfgs/cs35l41-dsp1-14_5dB.bincfg cs35l41-dsp1-spk-prot-10431f63-rl.bincfg

should be -l0.bincfg instead of -rl.bincfg I suppose.

By the way I am putting these extra files in /lib/firmware/updates/cirrus/, to make it easier to keep track of the firmware files I copied in versus the ones coming from system packages.

@LK7R
Copy link

LK7R commented Feb 20, 2025

@stiobhan typo fixed, glad it worked for you. Those .bincfg files tells the amplifier what level of amplification in dB it should use. You link to file that has desired aplification level (default without .bincfg is 17db).

Folder with .bincfg files:
/lib/firmware/cirrus/cs35l41/bincfgs

Levels as name of file suggests:

cs35l41-dsp1-14_5dB.bincfg -> 14.5dB
cs35l41-dsp1-16_5dB.bincfg -> 16.5dB  
cs35l41-dsp1-19_5dB.bincfg -> 19.5dB

@radupotop
Copy link

Thank you so much @LK7R, this is very useful. I no longer have the Expertbook P5405CSA to test, but I'm now considering getting one.
As others have suggested, if you can take the time to upload these changes upstream it would have a significantly wider impact on the community. 🙏

@muaiyadh
Copy link

muaiyadh commented Feb 22, 2025

I was able to get speakers working by patching and recompiling the <your_kernel_source_root>/sound/pci/hda/patch_realtek.c file with:
SND_PCI_QUIRK(0x1043, 0x1f63, "ASUS P5405CSA", ALC245_FIXUP_CS35L41_SPI_2),

Thank you for your help. On Fedora 41 Workstation, just adding the line without copying bin files and then compiling the latest kernel (6.14.0rc3) worked flawlessly. Finally, this laptop works great with Linux.

@stiobhan
Copy link

Oh indeed @muaiyadh, without these specific firmware files in place it does have a fallback:

cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Falling back to default firmware.
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: format 3 timestamp 0x62b5c26c
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: Fri 24 Jun 2022 14:55:56 GMT Daylight Time
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0, 2 algorithms
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.bin: v0.58.0
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: spk-prot: e:\workspace\workspace\tibranch_release_playback_6.76_2\ormis\staging\default_tunings\internal\CS35L
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Calibration applied: R0=10026
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: Firmware Loaded - Type: spk-prot, Gain: 17
cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: CS35L41 Bound - SSID: 10431F63, BST: 0, VSPK: 0, CH: L, FW EN: 1, SPKID: -19
snd_hda_codec_realtek ehdaudio0D0: bound spi1-CSC3551:00-cs35l41-hda.0 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])

@LK7R
Copy link

LK7R commented Feb 26, 2025

Sent patch to upstream, will see if it will be accepted.
https://lore.kernel.org/linux-sound/[email protected]/

Here is the patch:

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -10699,6 +10699,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x1043, 0x1f12, "ASUS UM5302", ALC287_FIXUP_CS35L41_I2C_2),
 	SND_PCI_QUIRK(0x1043, 0x1f1f, "ASUS H7604JI/JV/J3D", ALC245_FIXUP_CS35L41_SPI_2),
 	SND_PCI_QUIRK(0x1043, 0x1f62, "ASUS UX7602ZM", ALC245_FIXUP_CS35L41_SPI_2),
+	SND_PCI_QUIRK(0x1043, 0x1f63, "ASUS P5405CSA", ALC245_FIXUP_CS35L41_SPI_2),
 	SND_PCI_QUIRK(0x1043, 0x1f92, "ASUS ROG Flow X16", ALC289_FIXUP_ASUS_GA401),
 	SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2),
 	SND_PCI_QUIRK(0x1043, 0x31d0, "ASUS Zen AIO 27 Z272SD_A272SD", ALC274_FIXUP_ASUS_ZEN_AIO_27),

@cristianlivella
Copy link

I can confirm the patch work perfectly with the P5405CSA. Maybe the volume is a bit lower compared to Windows, but I have to reinstall it to do some testing.
Still, it's good enough.
Thank you guys!

@LK7R
Copy link

LK7R commented Mar 27, 2025

Patch was merged into kernel 6.14, compiled, tested, works, happy days!

@abishekmuthian
Copy link

Folks, can anyone please help understand the logs related to my audio chipset (CSC3551) on G634JY running Fedora 42 (6.14.2)

Why do I have

cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Enable(1) failed: -110
cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Enable(1) failed: -110

When I have audio working in duplex mode? Is this the reason why Analog Surround 4.0 is not working?

Also, What's up with the hardcoded Windows path of someone in the log. I had removed all the custom patches to make the audio work as the support is now in upstream; did I fail to remove anything?

DSP1: spk-prot: C:\Users\dchunyi\Documents\Asus_ROG\Project...

Here is the complete log -

[   15.719085] MacubexROGLinux kernel: Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 SPI devices.
[   16.128025] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Adding DSD properties for 10431CAF
[   16.168913] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Using extra _DSD properties, bypassing _DSD in ACPI
[   16.169088] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Cirrus Logic CS35L41 (35a40), Revision: B2
[   16.169159] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Adding DSD properties for 10431CAF
[   16.194727] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Using extra _DSD properties, bypassing _DSD in ACPI
[   16.194812] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Reset line busy, assuming shared reset
[   16.194886] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Cirrus Logic CS35L41 (35a40), Revision: B2
[   17.301622] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431caf.wmfw: format 3 >
[   17.301867] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431caf.wmfw: Fri 27 Au>
[   17.302653] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: Firmware: 400a4 vendor: 0x2 v0.43.1, 2 algorithms
[   17.302727] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431caf-spkid0-l0.bin: >
[   17.302795] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: spk-prot: C:\Users\dchunyi\Documents\Asus_ROG\Project>
[   17.302878] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Calibration applied: R0=9698
[   17.303030] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Firmware Loaded - Type: spk-prot, Gain: 17
[   17.303105] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: CS35L41 Bound - SSID: 10431CAF, BST: 0, VSPK: 0, CH: L, FW >
[   17.303171] MacubexROGLinux kernel: snd_hda_codec_realtek hdaudioC1D0: bound spi0-CSC3551:00-cs35l41-hda.0 (ops cs35l41_hda_comp_ops [snd_>
[   17.303240] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431caf.wmfw: format 3 >
[   17.303314] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431caf.wmfw: Fri 27 Au>
[   17.303382] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: Firmware: 400a4 vendor: 0x2 v0.43.1, 2 algorithms
[   17.303446] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot-10431caf-spkid0-r0.bin: >
[   17.303511] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: spk-prot: C:\Users\dchunyi\Documents\Asus_ROG\Project>
[   17.303580] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Calibration applied: R0=9726
[   17.303649] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Firmware Loaded - Type: spk-prot, Gain: 17
[   17.303715] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: CS35L41 Bound - SSID: 10431CAF, BST: 0, VSPK: 0, CH: R, FW >
[   17.303787] MacubexROGLinux kernel: snd_hda_codec_realtek hdaudioC1D0: bound spi0-CSC3551:00-cs35l41-hda.1 (ops cs35l41_hda_comp_ops [snd_>
[   53.200033] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Enable(1) failed: -110
[   53.301126] MacubexROGLinux kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Enable(1) failed: -110

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment