Skip to content

Instantly share code, notes, and snippets.

@lamperez
Last active April 9, 2026 05:27
Show Gist options
  • Select an option

  • Save lamperez/862763881c0e1c812392b5574727f6ff to your computer and use it in GitHub Desktop.

Select an option

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
} }
}
})
}
}
@slayerjain

slayerjain commented Feb 26, 2024

Copy link
Copy Markdown

@kenzoi as per torvalds/linux@c16dfab, this patch should be released in the v6.8-rc6. I tried installing this on my UX3405MA and had no luck.

In my case, the audio works but the volume is really low (compared to windows), like speech is barely audible - like 20% of windows volume. There was no difference in installing v6.8-rc6 and v6.7.x

[    6.172395] fedora kernel: Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 SPI devices.
[    6.441606] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Cirrus Logic CS35L41 (35a40), Revision: B2
[    6.441834] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Reset line busy, assuming shared reset
[    6.475276] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Cirrus Logic CS35L41 (35a40), Revision: B2
[    7.011838] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Falling back to default firmware.
[    7.015348] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: Firmware version: 3
[    7.015353] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: Fri 24 Jun 2022 14:55:56 GMT Daylight Time
[    7.146892] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0, 2 algorithms
[    7.148120] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.bin: v0.58.0
[    7.148125] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: spk-prot: e:\workspace\workspace\tibranch_release_playback_6.76_2\ormis\staging\default_tunings\in>
[    7.161724] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: CS35L41 Bound - SSID: 10431A63, BST: 1, VSPK: 1, CH: L, FW EN: 1, SPKID: -19
[    7.161731] fedora kernel: snd_hda_codec_realtek ehdaudio0D0: bound spi0-CSC3551:00-cs35l41-hda.0 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])
[    7.164371] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Falling back to default firmware.
[    7.166774] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: Firmware version: 3
[    7.166777] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: Fri 24 Jun 2022 14:55:56 GMT Daylight Time
[    7.284208] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0, 2 algorithms
[    7.285221] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot.bin: v0.58.0
[    7.285231] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: DSP1: spk-prot: e:\workspace\workspace\tibranch_release_playback_6.76_2\ormis\staging\default_tunings\in>
[    7.300136] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: CS35L41 Bound - SSID: 10431A63, BST: 1, VSPK: 0, CH: R, FW EN: 1, SPKID: -19
[    7.300146] fedora kernel: snd_hda_codec_realtek ehdaudio0D0: bound spi0-CSC3551:00-cs35l41-hda.1 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])
[  321.135983] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: Failed to read 256 bytes from 2800620: -16
[  667.964185] fedora kernel: cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: DSP1: Failed to read 256 bytes from 2800620: -16

@saaska-kim

Copy link
Copy Markdown

@lonk42 I have sound working on UM3402YA with kernel 6.7 using this SSDT file.

@lonk42

lonk42 commented Mar 4, 2024

Copy link
Copy Markdown

@lonk42 I have sound working on UM3402YA with kernel 6.7 using this SSDT file.

Awesome that one works!

@tholden92

Copy link
Copy Markdown

Following. Have the same problem with UX3405MA and default firmware error. Running the 6.8-rc7 kernel.

@tiaga

tiaga commented Mar 8, 2024

Copy link
Copy Markdown

As a workaround for Linux Mint 21.3 and Asus Zenbook 14 UX3402VA I've installed 6.7.7 kernel from Zabbly repo. However, microphone on my wire headset stopped working (no sound can be detected) on that kernel. Is there any workaround for that?

@isle9

isle9 commented Mar 13, 2024

Copy link
Copy Markdown

@kenzoi Still the same issue with default firmware fallback error and low sound on 6.8...

@slayerjain

Copy link
Copy Markdown

On a fresh installation, are we supposed to do any extra step (like SSDT patching) apart from installing linux 6.8 kernel?

@HARDWELL9191

HARDWELL9191 commented Mar 19, 2024

Copy link
Copy Markdown

@slayerjain @kenzoi Yep I've been having the volume issue as well. With both the ssdt patch before and in the 6.8 rc6 kernel now as well on my UX3402VA. It falls back to default firmware for some reason. Max volume on linux is like being at 20% on windows and if you try going past that with pavucontrol, the sound just gets distorted af. Hopefully someone can find a fix for this so we can actually get solid sound out of our laptops. It's literally the only thing that's holding me back from permanently switching to linux on my laptop and just remove my dual boot. I need me some good music sometimes ;)

@steffengy

steffengy commented Apr 3, 2024

Copy link
Copy Markdown

For 10431A63 - UX3405MA.304
@tholden92 @slayerjain and whoever else with one might want to test.
The following patch/hack works for me
and also confirmed different firmware being loaded / fallback messages fixed.

[ 11.160796] cs35l41-hda spi1-CSC3551:00-cs35l41-hda.0: DSP1: spk-prot: C:\Users\tyang\Desktop\Product Setting\SmartAMP\ASUS\ASUS_Zenbook\2023Projects\UX3405MA\Tuning_release\06082023\UX3405UM_19p5dB_Mock_NM_Lch_finish_ID_6p83_US_Xmax0p65.bin

For context: In bios version 304 pretty much all the config is present (confirmed via dumping and looking at ssdt16),
except for "spk-id-gpios". The patch below should force creation of only that GPIO in the driver - which doesnt seem to account for the case where a DSD is present but only 99% complete, hence the hack to skip that check
since I know the 1 missing gpio still needs to be initialized and isnt present in DSD.

https://gist.github.com/steffengy/aa48549f40c37acf85de7a7f9a6c0475

@tholden92

tholden92 commented Apr 3, 2024

Copy link
Copy Markdown

Tried to apply the patch, but got an error message.

Setting version...
Applying patch linux-v6.8.2-arch2.patch...
patching file Makefile
patching file arch/Kconfig
patching file drivers/firmware/sysfb.c
patching file drivers/net/xen-netfront.c
patching file include/linux/user_namespace.h
patching file init/Kconfig
patching file kernel/fork.c
patching file kernel/sysctl.c
patching file kernel/user_namespace.c
Applying patch sound-fix.patch...
patching file sound/pci/hda/cs35l41_hda_property.c
Hunk #1 succeeded at 85 with fuzz 1.
Hunk #2 FAILED at 232.
Hunk #3 FAILED at 240.
Hunk #4 succeeded at 423 with fuzz 1.
2 out of 4 hunks FAILED -- saving rejects to file sound/pci/hda/cs35l41_hda_property.c.rej

This is how the reject file looks like

    --- /dev/null
    +++ sound/pci/hda/cs35l41_hda_property.c    2024-04-03 12:27:54.540979240 +0100
    @@ -232,3 +233,3 @@
     
    -       if (!dsd_found) {
    +       // if (!dsd_found) {
                    ret = cs35l41_add_gpios(cs35l41, physdev, cfg->reset_gpio_index,
    @@ -240,6 +241,6 @@
                    }
    -       } else if (cfg->reset_gpio_index >= 0 || cfg->spkid_gpio_index >= 0) {
    +       /*} else if (cfg->reset_gpio_index >= 0 || cfg->spkid_gpio_index >= 0) {
                    dev_warn(cs35l41->dev, "Cannot add Reset/Speaker ID/SPI CS GPIO Mapping, "
                             "_DSD already exists.\n");
    -       }
    +       }*/

@steffengy

Copy link
Copy Markdown

@tholden92 Updated above with gist with more patch context, as the "short" version doesnt seem to apply well.

@tholden92

tholden92 commented Apr 3, 2024

Copy link
Copy Markdown

I can confirm that the patch works :-)

Edit: Forked a PKGBUILD from the CachyOS kernel and added your patch for anyone that wants to test.

https://aur.archlinux.org/packages/linux-cachyos-zenbook

@szweep

szweep commented Apr 5, 2024

Copy link
Copy Markdown

I recently bought a UX3402V and ran into the "no speaker sound" issue after installing Kubuntu. I was able to fix it by updating the kernel (using 6.7.10), but then observed the very low volume levels noted by others. I also saw kernel messages that the default firmware was loading.

This commit to the linux-firmware package is supposed to add the firmware links for my hardware (1043:16a3). After creating these links, no change was observed and the default firmware was still loaded.

I noticed that the links created by that patch use an upper case "A" (e.g. cs35l41-dsp1-spk-cali-104316A3.wmfw) in the filename which is different from all the other firmware files, so I recreated all the links using "104316a3" in the filenames. This worked: firmware was loaded and volume levels are back to normal. It appears this is a bug in the current linux-firmware package for this hardware.

@pavelkaptsiuh

pavelkaptsiuh commented Apr 5, 2024

Copy link
Copy Markdown

As a workaround for Linux Mint 21.3 and Asus Zenbook 14 UX3402VA I've installed 6.7.7 kernel from Zabbly repo. However, microphone on my wire headset stopped working (no sound can be detected) on that kernel. Is there any workaround for that?

There is a similar issue with UX3402ZA. I have Mint 5.15/Arch 6.8 dual boot.
5.15 kernel is the last kernel where headset microphone is working properly. But it have no fix for a speaker.
6.8 kernel has speaker fix but headset microphone is broken.
I tried to find a fix for a broken microphone few months earlier but without a luck.
You could try to go this rabbit hole. But it's an advanced topic and I had no motivation to spend days on replicating the solution. https://asus-linux.org/blog/sound-2021-01-11/

@pavelkaptsiuh

Copy link
Copy Markdown

BTW, guys with UX3402ZA/UX3402VA, could you please check is headset mic working properly in your laptops with 6.7+ kernels?

@isle9

isle9 commented Apr 7, 2024

Copy link
Copy Markdown

BTW, guys with UX3402ZA/UX3402VA, could you please check is headset mic working properly in your laptops with 6.7+ kernels?

@pave
Bluetooth ones work, but they worked even before 6.8 for me, so maybe there's some other issue that's causing it.

@isle9

isle9 commented Apr 7, 2024

Copy link
Copy Markdown

I recently bought a UX3402V and ran into the "no speaker sound" issue after installing Kubuntu. I was able to fix it by updating the kernel (using 6.7.10), but then observed the very low volume levels noted by others. I also saw kernel messages that the default firmware was loading.

This commit to the linux-firmware package is supposed to add the firmware links for my hardware (1043:16a3). After creating these links, no change was observed and the default firmware was still loaded.

I noticed that the links created by that patch use an upper case "A" (e.g. cs35l41-dsp1-spk-cali-104316A3.wmfw) in the filename which is different from all the other firmware files, so I recreated all the links using "104316a3" in the filenames. This worked: firmware was loaded and volume levels are back to normal. It appears this is a bug in the current linux-firmware package for this hardware.

Oh my lord, it finally works!
I tried creating links previosuly per @phaserblast advice, but it didin't really work, and I'm guessing the reason why it didn't work is because I only created links for .wmfw files. After going through the commit you linked, I noticed that there are also some .bin files that need to be linked.

Keep in mind that I didn't have any .bin files at all for my model until I created them myself. That's why I missed those the first time. I just searched for my model, and only the .wmfw files were in the folder.

@pavelkaptsiuh

pavelkaptsiuh commented Apr 8, 2024

Copy link
Copy Markdown

BTW, guys with UX3402ZA/UX3402VA, could you please check is headset mic working properly in your laptops with 6.7+ kernels?

@pave Bluetooth ones work, but they worked even before 6.8 for me, so maybe there's some other issue that's causing it.

I mean wired headset mic. Is it working for you?

@isle9

isle9 commented Apr 8, 2024

Copy link
Copy Markdown

Wired seems to work for me too.

@HARDWELL9191

Copy link
Copy Markdown

I recently bought a UX3402V and ran into the "no speaker sound" issue after installing Kubuntu. I was able to fix it by updating the kernel (using 6.7.10), but then observed the very low volume levels noted by others. I also saw kernel messages that the default firmware was loading.

This commit to the linux-firmware package is supposed to add the firmware links for my hardware (1043:16a3). After creating these links, no change was observed and the default firmware was still loaded.

I noticed that the links created by that patch use an upper case "A" (e.g. cs35l41-dsp1-spk-cali-104316A3.wmfw) in the filename which is different from all the other firmware files, so I recreated all the links using "104316a3" in the filenames. This worked: firmware was loaded and volume levels are back to normal. It appears this is a bug in the current linux-firmware package for this hardware.

Can you tell me the process of creating these links? I have a low volume issue with falling back to default firmware. I have the same device ID as you. I just don't know how to create these links.

@kenzoi

kenzoi commented Apr 8, 2024

Copy link
Copy Markdown

I noticed that the links created by that patch use an upper case "A" (e.g. cs35l41-dsp1-spk-cali-104316A3.wmfw) in the filename which is different from all the other firmware files, so I recreated all the links using "104316a3" in the filenames. This worked: firmware was loaded and volume levels are back to normal. It appears this is a bug in the current linux-firmware package for this hardware.

Very nice! This worked for me too! @szweep could you send a patch with this fix to upstream?

@HARDWELL9191 for me on Fedora the files are located here /lib/firmware/cirrus.

Create new symlinks as proposed above:

ln -s cs35l41-dsp1-spk-cali-10431e12-spkid0-l0.bin.xz cs35l41-dsp1-spk-cali-104316a3-spkid0-l0.bin.xz
ln -s cs35l41-dsp1-spk-cali-10431e12-spkid0-r0.bin.xz cs35l41-dsp1-spk-cali-104316a3-spkid0-r0.bin.xz
ln -s cs35l41-dsp1-spk-cali-10431e12-spkid1-l0.bin.xz cs35l41-dsp1-spk-cali-104316a3-spkid1-l0.bin.xz
ln -s cs35l41-dsp1-spk-cali-10431e12-spkid1-r0.bin.xz cs35l41-dsp1-spk-cali-104316a3-spkid1-r0.bin.xz
ln -s cs35l41/v6.61.1/halo_cspl_RAM_revB2_29.63.1.wmfw.xz cs35l41-dsp1-spk-cali-104316a3.wmfw.xz
ln -s cs35l41-dsp1-spk-prot-10431e12-spkid0-l0.bin.xz cs35l41-dsp1-spk-prot-104316a3-spkid0-l0.bin.xz
ln -s cs35l41-dsp1-spk-prot-10431e12-spkid0-r0.bin.xz cs35l41-dsp1-spk-prot-104316a3-spkid0-r0.bin.xz
ln -s cs35l41-dsp1-spk-prot-10431e12-spkid1-l0.bin.xz cs35l41-dsp1-spk-prot-104316a3-spkid1-l0.bin.xz
ln -s cs35l41-dsp1-spk-prot-10431e12-spkid1-r0.bin.xz cs35l41-dsp1-spk-prot-104316a3-spkid1-r0.bin.xz
ln -s cs35l41/v6.61.1/halo_cspl_RAM_revB2_29.63.1.wmfw cs35l41-dsp1-spk-prot-104316a3.wmfw
ln -s cs35l41/v6.61.1/halo_cspl_RAM_revB2_29.63.1.wmfw.xz cs35l41-dsp1-spk-prot-104316a3.wmfw.xz

@tiaga

tiaga commented Apr 8, 2024

Copy link
Copy Markdown

BTW, guys with UX3402ZA/UX3402VA, could you please check is headset mic working properly in your laptops with 6.7+ kernels?

For me on UX3402VA and Linux Mint 21.3 headset microphone stopped working.
Same issue can be seen in 6.5.0-17 from official Linux Mint repo. I guess something is wrong with 3.5 jack pins mapping, but unfortunately I couldn't figure what changes lead to this.

@pavelkaptsiuh

Copy link
Copy Markdown

BTW, guys with UX3402ZA/UX3402VA, could you please check is headset mic working properly in your laptops with 6.7+ kernels?

For me on UX3402VA and Linux Mint 21.3 headset microphone stopped working. Same issue can be seen in 6.5.0-17 from official Linux Mint repo. I guess something is wrong with 3.5 jack pins mapping, but unfortunately I couldn't figure what changes lead to this.

Wired seems to work for me too.

Interesting. I searched the internet quite extensively for a headset mic issue and it was nothing there. Might be it's some how related to BIOS config or Mint's version of GRUB.

@szweep

szweep commented Apr 13, 2024

Copy link
Copy Markdown

Very nice! This worked for me too! @szweep could you send a patch with this fix to upstream?

@kenzoi - I created a PR here: CirrusLogic/linux-firmware#31. I'm not sure what the procedures are for approval and merge as I've never done this before, but hopefully it will be seen.

@smallcms

Copy link
Copy Markdown

Looks, UX3405MA works now on kernel 6.8.5. Tested on Fedora 39, works: amplifiers, 3.5 jack headset. Like @steffengy i'm decompiled ssdt16.dat, but added "spk-id-gpios" Package section. Works without patching kernel:
https://github.com/smallcms/asus_zenbook_ux3405ma

@rmuhamedgaliev

rmuhamedgaliev commented Apr 29, 2024

Copy link
Copy Markdown

Hello, i tried apply patch but have error

[    0.009166] ACPI: Table Upgrade: install [SSDT-CUSTOM- CSC3551]
[    0.009168] ACPI: SSDT 0x00000000394ED000 000158 (v01 CUSTOM CSC3551  00000001 INTL 20220331)
[    5.850427] Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 SPI devices.
[    6.018972] cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: OTP Boot status 80000000 error
[    6.031984] cs35l41-hda: probe of spi0-CSC3551:00-cs35l41-hda.0 failed with error -5
[    6.039965] cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: OTP Boot status 80000000 error
[    6.053183] cs35l41-hda: probe of spi0-CSC3551:00-cs35l41-hda.1 failed with error -5

My patch and SPI3 info - https://gist.github.com/rmuhamedgaliev/e0886c86061e0ee99390f9044640c1de

My Setup - ROG Strix SCAR 18 G834JYR_G834JYR - 6.8.7-201.fsync.fc39.x86_64 Nobara 39

@alexgr-dev

Copy link
Copy Markdown

Updated my ASUS Zenbook UX6404VV to Ubuntu 24.04 (which comes with 6.8.0 kernel) and sound works well now. (I did not apply any patches before)
My BIOS is v304

@DeltaNeverUsed

Copy link
Copy Markdown

I still get no audio on 6.8.8 and the previous solution I used

hda-verb /dev/snd/hwC0D0 0x20 0x500 0x1b
hda-verb /dev/snd/hwC0D0 0x20 0x477 0x4a4b
hda-verb /dev/snd/hwC0D0 0x20 0x500 0xf
hda-verb /dev/snd/hwC0D0 0x20 0x477 0x74

doesn't work on any version higher than 6.6.10 on my ASUS Zenbook UX582L

@bkonkle

bkonkle commented May 1, 2024

Copy link
Copy Markdown

It works out-of-the-box for me in Ubuntu 24.04 on my ROG Strix G814JZ! 🚀

@Oless-N

Oless-N commented May 8, 2024

Copy link
Copy Markdown

hello guys!! I need help with a problem: asus rog zephyrus g16 2024 gu605m: low-level sound.
Linux user-GU605MI 6.8.8-060808-generic #202404271536 SMP PREEMPT_DYNAMIC Sat Apr 27 15:54:17 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux Ubuntu 24.04
journalctl -b -g CSC3556 --output short-monotonic
[ 2.373898] user-GU605MI kernel: Serial bus multi instantiate pseudo device driver CSC3556:00: Instantiated 2 SPI devices.
[ 2.484345] user-GU605MI kernel: cs35l56-hda spi0-CSC3556:00-cs35l56-hda.0: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0)
[ 2.493213] user-GU605MI kernel: cs35l56-hda spi0-CSC3556:00-cs35l56-hda.1: Reset GPIO busy, assume shared reset
[ 2.500317] user-GU605MI kernel: cs35l56-hda spi0-CSC3556:00-cs35l56-hda.1: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0)
[ 6122.443562] user-GU605MI kernel: cs35l56-hda spi0-CSC3556:00-cs35l56-hda.0: .bin file required but not found
[ 6122.443566] user-GU605MI kernel: cs35l56-hda spi0-CSC3556:00-cs35l56-hda.0: PM: dpm_run_callback(): cs35l56_hda_system_resume+0x0/0xd0 [snd_hda_scodec_cs35l56] returns -2
[ 6122.443583] user-GU605MI kernel: cs35l56-hda spi0-CSC3556:00-cs35l56-hda.0: PM: failed to resume: error -2
[ 6122.456528] user-GU605MI kernel: cs35l56-hda spi0-CSC3556:00-cs35l56-hda.1: .bin file required but not found
[ 6122.456532] user-GU605MI kernel: cs35l56-hda spi0-CSC3556:00-cs35l56-hda.1: PM: dpm_run_callback(): cs35l56_hda_system_resume+0x0/0xd0 [snd_hda_scodec_cs35l56] returns -2
[ 6122.456544] user-GU605MI kernel: cs35l56-hda spi0-CSC3556:00-cs35l56-hda.1: PM: failed to resume: error -2

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