No sound from internal speaker on Asus laptop - how I can patch the kernel?

Hello there,

I have an Asus laptop and I just updated to F41 and I still don’t have any sound from my internal speakers. But this is a known issue for Asus laptops that do not provide DSD data from the bios for some specific hardware. My model is UX582ZM and the audio amplifier is referenced CSC3551 (will be useful below).

Apparently some people was able to patch their Kernel by providing such data but I never tried it.

However I read recently the following post https://forums.linuxmint.com/viewtopic.php?t=418488 where someone explained that those patches were merged in Kernel 6.7 and should work out of the box.

Because I’m running kernel 6.12 right now (and even kernels > 6.7 on my previous fedora) I thought this should have worked for me as well.

But after a closer look in the patched file:
linux/sound/pci/hda/patch_realtek.c at 486291a0e6246364936df1ecd64c90affef4b9c5 · torvalds/linux · GitHub I see that my exact model is not listed. But there is one that is close enough as you can see.

When I do dmesg | grep CSC3551:

[    7.020723] Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 SPI devices.
[    7.330065] cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: Failed property cirrus,dev-index: -22
[    7.330071] cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: error -EINVAL: Platform not supported
[    7.330074] cs35l41-hda spi0-CSC3551:00-cs35l41-hda.0: probe with driver cs35l41-hda failed with error -22
[    7.339179] cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: Failed property cirrus,dev-index: -22
[    7.339186] cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: error -EINVAL: Platform not supported
[    7.339190] cs35l41-hda spi0-CSC3551:00-cs35l41-hda.1: probe with driver cs35l41-hda failed with error -22

It seems I also have the exact same amplifier reported for the other model:

SND_PCI_QUIRK(0x1043, 0x12af, "ASUS UX582ZS", ALC245_FIXUP_CS35L41_SPI_2),

I guess that because of my model not being exactly referenced here, this patch is not kicking in…

How can I apply the thing labeled as ALC245_FIXUP_CS35L41_SPI_2 in my case?

I hope my explanations is not confusing.
Any help or info on directions I can take will be greatly appreciated.

I can of course provide any additional log or output.

Also I’d like to suggest a patch into the kernel in order to add my model by providing required details.
The first argument of that patch function (0x1043 in the line above) seems to correspond to the vendor (Asus in my case) and I guess that the second argument (e.g. 0x12af above) is probably the model number. But I don’t have much clue…

Excerpted from docs.kernel.org – sound – hd-audio – notes – model-option:

A new style for the model option that was introduced since 5.15 kernel is to pass the PCI or codec SSID in the form of model=XXXX:YYYY where XXXX and YYYY are the sub-vendor and sub-device IDs in hex numbers, respectively. This is a kind of aliasing to another device; when this form is given, the driver will refer to that SSID as a reference to the quirk table. It’d be useful especially when the target quirk isn’t listed in the model table. For example, passing model=103c:8862 will apply the quirk for HP ProBook 445 G8 (which isn’t found in the model table as of writing) as long as the device is handled equivalently by the same driver.

If you create a /etc/modprobe.d/snd.conf file containing the following line, it might cause your sound card to be treated like the similar model you’ve identified (those quirk modes should be applied after you reboot).

options snd_hda_intel model=1043:12af
1 Like

Hello and thank you for your help!

I tried this but it didn’t work.
I still have the same dmesg log and still have nothing showing up in the sound settings:

But it gave me some material to search for…
Indeed I found the following post: Linux for ROG Notebooks
So I also tried renaming the file with a different name like /etc/modprobe.d/alsa-base.conf but I guess it doesn’t matter and that every .conf files are just “loaded”, right?
I also tried randomly different values (given as sample in that link) and I even tried the number with the I2C model even though I really think I have an SPI model (according to the dmesg log). Each time I rebooted the system of course and still getting same dmesg logs.

So I wanted to check if somehow this reference model I put in this file has been taken into account and that it was loaded, but I’m not sure how to do that…

In the meantime, I wanted to see if I can found any reference to the actual chipset I have in my computer.

I tried the following commands (found reading guides online) but without much relevance

  • cat /proc/asound/pcm
00-03: HDMI 0 : HDMI 0 : playback 1
00-07: HDMI 1 : HDMI 1 : playback 1
00-08: HDMI 2 : HDMI 2 : playback 1
00-09: HDMI 3 : HDMI 3 : playback 1
01-00: HDA Analog (*) :  : playback 1 : capture 1
01-03: HDMI1 (*) :  : playback 1
01-04: HDMI2 (*) :  : playback 1
01-05: HDMI3 (*) :  : playback 1
01-06: DMIC (*) :  : capture 1
01-07: DMIC16kHz (*) :  : capture 1
01-31: HDA Analog Deep Buffer (*) :  : playback 1
  • pacmd list-cards
No PulseAudio daemon running, or not running as session daemon.
  • aplay --list-devices
**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sofhdadsp [sof-hda-dsp], device 0: HDA Analog (*) []
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: sofhdadsp [sof-hda-dsp], device 3: HDMI1 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sofhdadsp [sof-hda-dsp], device 4: HDMI2 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sofhdadsp [sof-hda-dsp], device 5: HDMI3 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sofhdadsp [sof-hda-dsp], device 31: HDA Analog Deep Buffer (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
  • inxi -Axxx
Audio:
  Device-1: Intel Alder Lake PCH-P High Definition Audio vendor: ASUSTeK
    driver: sof-audio-pci-intel-tgl bus-ID: 0000:00:1f.3 chip-ID: 8086:51c8
    class-ID: 0401
  Device-2: NVIDIA GA106 High Definition Audio vendor: ASUSTeK
    driver: snd_hda_intel v: kernel bus-ID: 0000:01:00.1 chip-ID: 10de:228e
    class-ID: 0403
  API: ALSA v: k6.12.6-200.fc41.x86_64 status: kernel-api
  Server-1: PipeWire v: 1.2.7 status: active with: 1: pipewire-pulse
    status: active 2: wireplumber status: active 3: pipewire-alsa type: plugin
    4: pw-jack type: plugin

However, the following give an interesting result:

  • lspci -nnv (showing only audio related devices)
0000:00:1f.3 Multimedia audio controller [0401]: Intel Corporation Alder Lake PCH-P High Definition Audio Controller [8086:51c8] (rev 01)
	Subsystem: ASUSTeK Computer Inc. Device [1043:1a8f]
	Flags: bus master, fast devsel, latency 32, IRQ 215, IOMMU group 17
	Memory at 624f2a0000 (64-bit, non-prefetchable) [size=16K]
	Memory at 624f000000 (64-bit, non-prefetchable) [size=1M]
	Capabilities: <access denied>
	Kernel driver in use: sof-audio-pci-intel-tgl
	Kernel modules: snd_hda_intel, snd_soc_avs, snd_sof_pci_intel_tgl

0000:01:00.1 Audio device [0403]: NVIDIA Corporation GA106 High Definition Audio Controller [10de:228e] (rev a1)
	Subsystem: ASUSTeK Computer Inc. Device [1043:1a9c]
	Flags: bus master, fast devsel, latency 0, IRQ 17, IOMMU group 18
	Memory at 88080000 (32-bit, non-prefetchable) [size=16K]
	Capabilities: <access denied>
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel

Here the interesting part is that, it seems that indeed the actual model is 1043:1a8f (second line of first block) which is also present in the patch_realtek.c file from the official kernel 6.7 patch!
And I thought maybe it was not taken into account in the first place because maybe the patch issued in kernel 6.7 was matching against the model name or whatnot…

But then I go back to editing the modprobe .conf file putting:

options snd_hda_intel model=1043:1a8f

But still no luck.

I also found the following guide (sorry it’s in french and was not able to find en english equivalent) which show some variants of that same modprobe options (using instead brand name for example)

What else I can check?

I wonder if in my version this patch was actually merged or not?

Again, many thanks for your time…

EDIT: it seems that modinfo <some module name> can give information about a module that is loaded…
I guess that here it’s the name of the file, right?
modinfo alsa-base gives modinfo: ERROR: Module alsa-base not found.

Does it mean it’s not loaded?

EDIT2: whether it’s named snd.conf or not, the command modinfo snd gives me the following output… But I guess it’s not related to that edit, right?

filename:       /lib/modules/6.12.6-200.fc41.x86_64/kernel/sound/core/snd.ko.xz
alias:          char-major-116-*
license:        GPL
description:    Advanced Linux Sound Architecture driver for soundcards.
author:         Jaroslav Kysela <perex@perex.cz>
depends:        soundcore
intree:         Y
name:           snd
retpoline:      Y
vermagic:       6.12.6-200.fc41.x86_64 SMP preempt mod_unload 
sig_id:         PKCS#7
signer:         Fedora kernel signing key
sig_key:        1C:8A:A4:AD:36:37:A9:09:C6:47:52:E4:3C:76:99:A9:F3:63:98:D3
sig_hashalgo:   sha256
signature:      01:96:EE:CA:96:C3:71:37:46:A1:55:AB:BC:CE:5E:B5:CA:54:13:4A:
		9D:0C:94:E2:6A:17:4A:7E:20:A3:53:E0:EC:F3:6F:D4:C6:67:F4:DA:
		A0:9F:25:90:D5:82:3A:A0:26:CB:11:F3:7D:85:A8:C2:BC:34:4F:E7:
		CA:00:77:5E:48:59:1C:55:13:A8:ED:7F:EC:93:94:E5:DE:FF:C9:85:
		B0:3B:4E:F1:E2:5D:7D:A3:75:34:F7:A7:25:C1:92:40:CD:6A:B9:BC:
		36:69:75:F8:46:B7:FD:D1:EF:0C:A8:9B:70:81:1A:85:91:C0:C6:58:
		5E:D2:06:66:C4:6D:9E:1C:F9:E9:D9:68:88:5B:E2:0A:44:EA:F4:C3:
		DE:08:D6:2E:EA:17:01:91:C9:C0:FA:A3:D2:2E:F9:60:56:5A:41:6B:
		1B:76:BB:2E:CE:7A:4B:99:52:37:12:C8:0D:DC:E5:25:F7:20:CC:55:
		02:49:2F:E3:1A:F5:52:36:22:8E:10:42:DB:B8:EA:58:54:CE:D5:E4:
		2E:99:F1:2B:B6:30:C5:F3:C9:4D:D8:AE:31:ED:09:10:34:5C:69:EF:
		6D:11:61:EE:24:54:DE:29:6E:30:E0:A3:68:CC:F4:E4:2F:7A:69:50:
		C7:D6:26:87:BA:CF:1D:D6:29:B6:5A:CF:32:C6:5B:86:B4:65:45:C0:
		18:C8:E2:4B:D7:7F:B0:13:22:F6:6F:04:BE:44:BD:B5:FD:B4:58:0E:
		CA:05:F0:B5:68:BE:7C:EB:DD:82:01:17:8A:11:2F:E6:83:9D:95:6C:
		6B:C5:DB:D7:FA:0A:B7:57:A2:BA:EC:70:D6:51:E0:A7:24:80:51:05:
		D3:69:10:90:1C:6A:68:76:95:19:EC:7D:87:42:33:B6:16:55:65:70:
		C8:7D:EB:33:94:43:13:4E:E2:A8:56:8B:4D:26:7C:49:D5:CA:76:3E:
		78:BA:31:38:31:67:A0:3A:90:A5:29:0B:13:DA:0B:C8:70:E2:7A:E4:
		55:C7:E2:AC:73:CC:C4:66:59:D9:38:83:78:8B:EB:91:E8:B6:F8:C9:
		0C:CB:DB:40:63:74:32:CE:B0:B4:C1:85:1F:6E:F1:DB:A8:E4:B9:7E:
		7B:77:84:63:47:32:AC:0B:A5:1C:01:76:AA:AF:40:CF:03:F9:EF:11:
		C0:63:E2:1A:E4:03:37:10:81:C3:8C:D1:EE:F2:CD:76:BF:F2:41:E2:
		66:39:65:93:EC:C6:9A:21:2C:DA:E9:86:58:2F:EF:13:14:DD:99:88:
		1E:9E:D6:0A:30:53:A7:15:B8:8F:16:A2:8B:0F:FC:9F:85:E3:0A:B9:
		49:47:50:C5:9A:8C:7F:90:3D:EF:8F:07
parm:           max_user_ctl_alloc_size:Max allocation size for user controls (int)
parm:           slots:Module names assigned to the slots. (array of charp)
parm:           major:Major # for sound driver. (int)
parm:           cards_limit:Count of auto-loadable soundcards. (int)

Yes, that is correct, only the extension (.conf) is significant. BTW, the _ and - characters are also interchangeable when specifying the module/driver name (i.e. snd_hda_intel and snd-hda-intel are equivalent).


The following command should reveal what model options are in effect for that driver:

cat /sys/module/snd_hda_intel/parameters/model

You can find other parameters there as well and you might even be able to change some of them at runtime by writing a new value to the file. Sometimes, however, the module will need to be unloaded and completely reloaded for a new value to take effect.


You need to use the name of the driver there (snd_hda_intel) rather than the name of the config file.

Right, it is not related to the name of the config file. There just happens to be a driver that is also named snd and that is what you are seeing. You can list all loaded drivers/modules by running the lsmod command.

1 Like

My bad, this was obvious…

So, running modinfo snd_hda_intel outputs the following:

filename:       /lib/modules/6.12.6-200.fc41.x86_64/kernel/sound/pci/hda/snd-hda-intel.ko.xz
description:    Intel HDA driver
license:        GPL
alias:          pci:v00000014d00007A37sv*sd*bc*sc*i*
alias:          pci:v00000014d00007A07sv*sd*bc*sc*i*
alias:          pci:v00001D17d00003288sv*sd*bc*sc*i*
alias:          pci:v00001022d*sv*sd*bc04sc03i00*
alias:          pci:v00001002d*sv*sd*bc04sc03i00*
alias:          pci:v000015ADd00001977sv*sd*bc*sc*i*
alias:          pci:v000017F3d00003010sv*sd*bc*sc*i*
alias:          pci:v000013F6d00005011sv*sd*bc*sc*i*
alias:          pci:v00001102d00000009sv*sd*bc*sc*i*
alias:          pci:v00001102d00000012sv*sd*bc*sc*i*
alias:          pci:v00001102d00000010sv*sd*bc*sc*i*
alias:          pci:v00006549d00002200sv*sd*bc*sc*i*
alias:          pci:v00006549d00001200sv*sd*bc*sc*i*
alias:          pci:v000010DEd*sv*sd*bc04sc03i00*
alias:          pci:v000010B9d00005461sv*sd*bc*sc*i*
alias:          pci:v00001039d00007502sv*sd*bc*sc*i*
alias:          pci:v00001106d00009140sv*sd*bc*sc*i*
alias:          pci:v00001106d00009170sv*sd*bc*sc*i*
alias:          pci:v00001106d00003288sv*sd*bc*sc*i*
alias:          pci:v00006766d*sv*sd*bc04sc03i00*
alias:          pci:v00001002d0000AB38sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AB30sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AB28sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AB20sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AB18sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AB10sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AB08sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AB00sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAF8sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAF0sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAE8sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAE0sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAD8sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAC8sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAC0sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAB0sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAA8sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AAA0sv*sd*bc*sc*i*
alias:          pci:v00001002d00009902sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA98sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA90sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA88sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA80sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA68sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA60sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA58sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA50sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA48sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA40sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA38sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA30sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA28sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA20sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA18sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA10sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA08sv*sd*bc*sc*i*
alias:          pci:v00001002d0000AA00sv*sd*bc*sc*i*
alias:          pci:v00001002d00009840sv*sd*bc*sc*i*
alias:          pci:v00001002d0000970Fsv*sd*bc*sc*i*
alias:          pci:v00001002d0000960Fsv*sd*bc*sc*i*
alias:          pci:v00001002d00007919sv*sd*bc*sc*i*
alias:          pci:v00001002d0000793Bsv*sd*bc*sc*i*
alias:          pci:v00001002d000015B3sv*sd*bc*sc*i*
alias:          pci:v00001002d0000157Asv*sd*bc*sc*i*
alias:          pci:v00001002d00001308sv*sd*bc*sc*i*
alias:          pci:v00001002d00000002sv*sd*bc*sc*i*
alias:          pci:v00001022d000015E3sv*sd*bc*sc*i*
alias:          pci:v00001022d0000157Asv*sd*bc*sc*i*
alias:          pci:v00001022d00001487sv*sd*bc*sc*i*
alias:          pci:v00001022d00001457sv*sd*bc*sc*i*
alias:          pci:v00001022d0000780Dsv*sd*bc*sc*i*
alias:          pci:v00001002d00004383sv*sd*bc*sc*i*
alias:          pci:v00001002d0000437Bsv*sd*bc*sc*i*
alias:          pci:v00008086d*sv*sd*bc04sc03i00*
alias:          pci:v00008086d00003A6Esv*sd*bc*sc*i*
alias:          pci:v00008086d00003A3Esv*sd*bc*sc*i*
alias:          pci:v00008086d0000293Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000293Esv*sd*bc*sc*i*
alias:          pci:v00008086d0000284Bsv*sd*bc*sc*i*
alias:          pci:v00008086d0000269Asv*sd*bc*sc*i*
alias:          pci:v00008086d000027D8sv*sd*bc*sc*i*
alias:          pci:v00008086d00002668sv*sd*bc*sc*i*
alias:          pci:v00008086d00002284sv*sd*bc*sc*i*
alias:          pci:v00008086d00000F04sv*sd*bc*sc*i*
alias:          pci:v00008086d0000080Asv*sd*bc*sc*i*
alias:          pci:v00008086d0000811Bsv*sd*bc*sc*i*
alias:          pci:v00008086d00003B57sv*sd*bc*sc*i*
alias:          pci:v00008086d00003B56sv*sd*bc*sc*i*
alias:          pci:v00008086d0000160Csv*sd*bc*sc*i*
alias:          pci:v00008086d00000D0Csv*sd*bc*sc*i*
alias:          pci:v00008086d00000C0Csv*sd*bc*sc*i*
alias:          pci:v00008086d00000A0Csv*sd*bc*sc*i*
alias:          pci:v00008086d00003198sv*sd*bc*sc*i*
alias:          pci:v00008086d00005A98sv*sd*bc*sc*i*
alias:          pci:v00008086d0000E428sv*sd*bc*sc*i*
alias:          pci:v00008086d00007728sv*sd*bc*sc*i*
alias:          pci:v00008086d00007F50sv*sd*bc*sc*i*
alias:          pci:v00008086d0000A828sv*sd*bc*sc*i*
alias:          pci:v00008086d0000E2F7sv*sd*bc*sc*i*
alias:          pci:v00008086d00007E28sv*sd*bc*sc*i*
alias:          pci:v00008086d000051CFsv*sd*bc*sc*i*
alias:          pci:v00008086d000051CEsv*sd*bc*sc*i*
alias:          pci:v00008086d000051CBsv*sd*bc*sc*i*
alias:          pci:v00008086d000051CAsv*sd*bc*sc*i*
alias:          pci:v00008086d00007A50sv*sd*bc*sc*i*
alias:          pci:v00008086d00004B58sv*sd*bc*sc*i*
alias:          pci:v00008086d00004B55sv*sd*bc*sc*i*
alias:          pci:v00008086d000054C8sv*sd*bc*sc*i*
alias:          pci:v00008086d000051CCsv*sd*bc*sc*i*
alias:          pci:v00008086d000051CDsv*sd*bc*sc*i*
alias:          pci:v00008086d000051C9sv*sd*bc*sc*i*
alias:          pci:v00008086d000051C8sv*sd*bc*sc*i*
alias:          pci:v00008086d00007AD0sv*sd*bc*sc*i*
alias:          pci:v00008086d00004F92sv*sd*bc*sc*i*
alias:          pci:v00008086d00004F91sv*sd*bc*sc*i*
alias:          pci:v00008086d00004F90sv*sd*bc*sc*i*
alias:          pci:v00008086d0000490Dsv*sd*bc*sc*i*
alias:          pci:v00008086d000043C8sv*sd*bc*sc*i*
alias:          pci:v00008086d0000A0C8sv*sd*bc*sc*i*
alias:          pci:v00008086d00004DC8sv*sd*bc*sc*i*
alias:          pci:v00008086d000038C8sv*sd*bc*sc*i*
alias:          pci:v00008086d00003DC8sv*sd*bc*sc*i*
alias:          pci:v00008086d000034C8sv*sd*bc*sc*i*
alias:          pci:v00008086d0000F0C8sv*sd*bc*sc*i*
alias:          pci:v00008086d0000A3F0sv*sd*bc*sc*i*
alias:          pci:v00008086d0000F1C8sv*sd*bc*sc*i*
alias:          pci:v00008086d000006C8sv*sd*bc*sc*i*
alias:          pci:v00008086d000002C8sv*sd*bc*sc*i*
alias:          pci:v00008086d00009DC8sv*sd*bc*sc*i*
alias:          pci:v00008086d0000A348sv*sd*bc*sc*i*
alias:          pci:v00008086d0000A2F0sv*sd*bc*sc*i*
alias:          pci:v00008086d00009D71sv*sd*bc*sc*i*
alias:          pci:v00008086d0000A171sv*sd*bc*sc*i*
alias:          pci:v00008086d00009D70sv*sd*bc*sc*i*
alias:          pci:v00008086d0000A170sv*sd*bc*sc*i*
alias:          pci:v00008086d00009CA0sv*sd*bc*sc*i*
alias:          pci:v00008086d00009C21sv*sd*bc*sc*i*
alias:          pci:v00008086d00009C20sv*sd*bc*sc*i*
alias:          pci:v00008086d0000A270sv*sd*bc*sc*i*
alias:          pci:v00008086d0000A1F0sv*sd*bc*sc*i*
alias:          pci:v00008086d00008D21sv*sd*bc*sc*i*
alias:          pci:v00008086d00008D20sv*sd*bc*sc*i*
alias:          pci:v00008086d00008CA0sv*sd*bc*sc*i*
alias:          pci:v00008086d00008C20sv*sd*bc*sc*i*
alias:          pci:v00008086d00001E20sv*sd*bc*sc*i*
alias:          pci:v00008086d00001D20sv*sd*bc*sc*i*
alias:          pci:v00008086d00001C20sv*sd*bc*sc*i*
depends:        snd-hda-codec,snd-hda-core,snd,snd-pcm,snd-intel-dspcfg
intree:         Y
name:           snd_hda_intel
retpoline:      Y
vermagic:       6.12.6-200.fc41.x86_64 SMP preempt mod_unload 
sig_id:         PKCS#7
signer:         Fedora kernel signing key
sig_key:        1C:8A:A4:AD:36:37:A9:09:C6:47:52:E4:3C:76:99:A9:F3:63:98:D3
sig_hashalgo:   sha256
signature:      21:82:1C:CF:FA:A6:0A:02:2B:35:B3:06:B6:7F:D4:7A:59:0A:21:34:
		34:F0:63:71:A9:EA:3E:EF:E9:2C:5E:9C:A9:F6:95:B6:19:7A:5B:58:
		51:8D:F3:87:A3:55:5D:69:36:C2:98:71:4F:AC:9A:16:11:B5:94:1B:
		DA:D6:A1:D9:18:27:6A:05:0A:B0:52:4A:3D:6F:A9:66:4E:BD:95:6B:
		0B:B6:9D:4F:20:27:08:BE:20:CC:CC:4B:CB:C6:82:72:0D:17:67:99:
		83:89:D4:68:C3:EA:A8:86:1E:87:FE:32:BE:99:52:D5:54:1D:A9:70:
		15:D8:74:9B:AC:B6:F9:8E:47:92:97:99:B5:2D:4B:EC:5C:33:83:74:
		9C:B7:1C:2B:11:D3:38:81:9C:1A:58:EA:F9:D7:81:CB:81:31:05:6B:
		B3:CF:BC:AD:50:BB:96:3B:95:0F:45:2D:D3:C1:F5:05:BE:65:04:A5:
		11:90:2E:7D:FA:6C:6A:C0:88:CE:68:EB:E2:EE:19:62:25:D8:60:EF:
		BE:D7:35:94:F5:FB:E2:76:BF:C1:6E:AE:A9:FA:89:6A:21:9F:B9:CB:
		73:7A:92:8B:04:90:57:BB:F4:5E:A7:B2:19:91:B3:85:E8:2D:61:85:
		ED:F5:DF:60:27:A3:F9:1D:73:FF:6F:CD:B6:7E:73:49:CD:99:12:0F:
		4D:DD:CA:80:2D:21:A3:88:3A:5F:60:AB:9D:A3:2A:EA:12:0C:8B:69:
		51:C4:09:36:06:EF:EA:9A:69:2F:56:87:56:6A:16:D9:F1:4F:A9:3C:
		F8:BA:53:66:A7:E9:D0:D9:F8:12:32:F1:6F:EA:A2:84:29:EC:43:39:
		4D:BE:B7:A8:2F:F9:4F:9C:F3:0C:07:C1:66:63:18:BE:D5:DB:A9:CB:
		4B:6C:F9:37:04:2E:2F:54:56:E6:4C:7C:F4:14:78:9C:3E:97:D1:3D:
		88:01:BB:2C:A6:74:0D:FC:37:B2:EF:21:6D:D0:47:13:9E:87:A7:85:
		0E:49:FB:62:42:50:00:49:1E:3B:5A:62:02:9B:2E:AC:C0:CF:75:D9:
		C2:4E:32:9C:07:9D:CC:67:75:5B:37:8D:6E:7B:70:EB:9E:22:4A:F4:
		20:57:9B:A1:94:04:30:A9:4B:B4:1C:97:08:C3:8F:16:5E:DB:AF:50:
		1F:9C:72:4B:A2:86:72:90:B8:B0:19:42:BE:D5:88:5E:9A:58:EB:E6:
		08:5A:2D:AF:B9:D0:AC:A1:CA:6B:EF:84:53:0E:C0:84:31:30:2E:45:
		E4:8B:C5:6F:C6:99:56:8A:A2:4D:3E:A4:1D:CE:FF:AB:5A:4E:33:0E:
		15:2F:9A:BA:02:C8:E0:DC:7D:6B:41:38
parm:           index:Index value for Intel HD audio interface. (array of int)
parm:           id:ID string for Intel HD audio interface. (array of charp)
parm:           enable:Enable Intel HD audio interface. (array of bool)
parm:           model:Use the given board model. (array of charp)
parm:           position_fix:DMA pointer read method.(-1 = system default, 0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO, 5 = SKL+, 6 = FIFO). (array of int)
parm:           bdl_pos_adj:BDL position adjustment offset. (array of int)
parm:           probe_mask:Bitmask to probe codecs (default = -1). (array of int)
parm:           probe_only:Only probing and no codec initialization. (array of int)
parm:           jackpoll_ms:Ms between polling for jack events (default = 0, using unsol events only) (array of int)
parm:           single_cmd:Use single command to communicate with codecs (for debugging only). (bint)
parm:           enable_msi:Enable Message Signaled Interrupt (MSI) (bint)
parm:           patch:Patch file for Intel HD audio interface. (array of charp)
parm:           beep_mode:Select HDA Beep registration mode (0=off, 1=on) (default=1). (array of bool)
parm:           dmic_detect:Allow DSP driver selection (bypass this driver) (0=off, 1=on) (default=1); deprecated, use snd-intel-dspcfg.dsp_driver option instead (bool)
parm:           ctl_dev_id:Use control device identifier (based on codec address). (bool)
parm:           power_save:Automatic power-saving timeout (in second, 0 = disable). (xint)
parm:           pm_blacklist:Enable power-management denylist (bint)
parm:           power_save_controller:Reset controller in power save mode. (bool)
parm:           align_buffer_size:Force buffer and period sizes to be multiple of 128 bytes. (bint)
parm:           snoop:Enable/disable snooping (bint)

I can see parm: model: ..... but it doesn’t show the actual value…

Indeed! This command correctly display what I put in the .conf file…
Here with a given value (I tried many of them):

1043:1473,(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)

But all those nulls makes me wonder if it’s not missing something?

If this tells that the .conf file is loaded, could the problem be rather related to alsa/pulseaudio/pipewire/etc.?

I’m sad this is not working in my case :frowning:

PS: going to try removing the .conf file and check for the output of this last command…

I’m not sure, but I think it just means no options are set for those other slots. I get the same thing on my working PC. It is OK. I think if you have multiple sound cards using that driver, you can set options for a specific card by using commas to “align” the options with the slot offset. For example, I think if you used model=,1043:1a8f, and you had two sound cards that used that snd_hda_intel driver, then the option would be applied to the second card.

1 Like

You are not alone. It is a known shortcoming of Linux that it doesn’t always work with all hardware. Sometimes you can get a device to work by fiddling with some parameters as you are doing. Other times people work around the problems by purchasing hardware that is known to work with Linux. There exist databases to help track how well various hardware works with Linux. For example: https://linux-hardware.org/

1 Like

Thanks for confirming this!

In any case, removing the .conf file displays (null) in the first slot as well…
So I guess that the .conf file is taken into account at least.

Could it be that this file (from the 6.7 kernel patch) is not part of the current kernel I’m running? Put it in other words, is it possible some distros use kernel versions that might not apply all the patches available?

Is there a way to verify that in the compiled kernel I’m running?

When I click on the commit number (33affa7), I see it “tagged” for Linux kernels since the 6.9 release:

It looks like that patch has been applied to the 6.12 kernel you are running.

Also, you might try something like sudo dmesg | grep quirk to see if it lists what quirks are being applied to your sound cards.

1 Like

Well, I know that, and I’m still happily using Linux with these caveats…
In this case, I’m using Bluetooth speakers at home… And if I’m not at home, well I don’t play sound out loud anyway when outside :slight_smile:

I was just excited it might finally work because of that supposedly updated kernel (e.g. another gist stating it: CS35L41 amplifiers in an ASUS Zenbook on linux · GitHub)

I just found the following as well: GitHub - xoocoon/hp-15-ew0xxx-snd-fix: DKMS module for fixing the sound on Linux for HP models Envy x360 15-ew0xxx where they are patching another file from the kernel (seems to be the original realtek driver)…

I will probably try that later and will update here if I have more luck using that…

Thanks again confirming this!

Here is the output of this command:

[    1.452714] xhci_hcd 0000:00:0d.0: hcc params 0x20007fc1 hci version 0x120 quirks 0x0000000200009810
[    1.457099] xhci_hcd 0000:00:14.0: hcc params 0x20007fc1 hci version 0x120 quirks 0x0000100200009810

It doesn’t seem to be related to snd_hda_intel or cirrus or realtek related things :thinking:

It looks like your internal audio card is using the sof-audio-pci-intel-tgl driver, not the snd_hda_intel driver. That might be why your settings seem to have no effect.

If I’m reading the DB correctly, that audo chip is also supported by the snd_hda_intel driver: Intel Alder Lake PCH-P High Definition Audio Controller

You might try blacklisting the sof-audio-pci-intel-tgl driver by adding the following line to your /etc/modprobe.d/snd.conf file:

blacklist sof-audio-pci-intel-tgl

Correction: use options snd-intel-dspcfg dsp_driver=1

With the above line, your sound card should fall back to using the older snd_hda_intel driver. You should be able to confirm what driver it is using by reading the output from lspci -k.

1 Like

Oh… Interesting!

Thanks again!

Here is my output of lscpi -k with the following .conf file (which I tried with and without the options line):

options	snd_hda_intel model=1043:1a8f
blacklist sof-audio-pci-intel-tgl

scpi -k outputs (relevant audio devices):

0000:00:1f.3 Multimedia audio controller: Intel Corporation Alder Lake PCH-P High Definition Audio Controller (rev 01)
	Subsystem: ASUSTeK Computer Inc. Device 1a8f
	Kernel driver in use: sof-audio-pci-intel-tgl
	Kernel modules: snd_hda_intel, snd_soc_avs, snd_sof_pci_intel_tgl

0000:01:00.1 Audio device: NVIDIA Corporation GA106 High Definition Audio Controller (rev a1)
	Subsystem: ASUSTeK Computer Inc. Device 1a9c
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel

Which BTW is the same output wether I have the blacklist sof-audio-pci-intel-tgl line or not.

So, I guess the blacklisting is not taken into account…

I’m going to try with the module name snd_sof_pci_intel_tgl, just in case…

But I guess I’m getting close!!

My bad. Apparently the way to disable the SOF driver is with options snd-intel-dspcfg dsp_driver=1, not blacklist ....

1 Like

Okay, using the following brought me a little hope for a split second as I was able to see a speaker icon in my sounds instead of the usual headphone icon shown here:

But I got a Dummy Output device that is still not working…

So using blacklist snd_sof_pci_intel_tgl, the output of lspci -k is now:

0000:00:1f.3 Multimedia audio controller: Intel Corporation Alder Lake PCH-P High Definition Audio Controller (rev 01)
	Subsystem: ASUSTeK Computer Inc. Device 1a8f
	Kernel modules: snd_hda_intel, snd_soc_avs, snd_sof_pci_intel_tgl

Going to revert and try to search with that new info!

That’s interesting. It looks like there is also an AVS driver for your sound card. If the legacy driver doesn’t work, you might try that by changing options snd-intel-dspcfg dsp_driver=1 to options snd-intel-dspcfg dsp_driver=4.

$ modinfo -p snd-intel-dspcfg
dsp_driver:Force the DSP driver for Intel DSP (0=auto, 1=legacy, 2=SST, 3=SOF, 4=AVS) (int)
1 Like

No need to apologize!
Thanks for the update!

So I tried this… It still doesn’t work but it’s encouraging!
As for now, I have the following details in sound settings:


The sound meter is correctly animating when there’s sound although no actual sound is outputed!

Here is the output of lspci -k

0000:00:1f.3 Multimedia audio controller: Intel Corporation Alder Lake PCH-P High Definition Audio Controller (rev 01)
	Subsystem: ASUSTeK Computer Inc. Device 1a8f
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel, snd_soc_avs, snd_sof_pci_intel_tgl

Oh…
Just noticed this… Okay going to try!!

Encouraging indeed. If that AVS driver doesn’t work, then you might try coming back to this legacy driver and fiddling a little more with those quirks modes. They might work if your card is actually using that driver, but be sure you are applying the quirks modes to the right card – it looks like you also have a nvidia card that is using the snd_hda_intel driver (I guess that is for audio on the HDMI line?).

1 Like
$ modinfo -p snd_soc_avs
i2s_test:Probe I2S test-board and skip all other I2S boards (bool)
ignore_fw_version:Ignore firmware version check 0=no (default), 1=yes (bool)
pgctl_mask:PCI PGCTL policy override (uint)
cgctl_mask:PCI CGCTL policy override (uint)

It looks like the AVS driver is particular about your firmware revision. Updating your firmware is a good idea in any case.

1 Like

Unfortunately, using dsp_driver=4 show again the Dummy Output…

Here is the lspci -k output in this case:

0000:00:1f.3 Multimedia audio controller: Intel Corporation Alder Lake PCH-P High Definition Audio Controller (rev 01)
	Subsystem: ASUSTeK Computer Inc. Device 1a8f
	Kernel driver in use: snd_soc_avs
	Kernel modules: snd_hda_intel, snd_soc_avs, snd_sof_pci_intel_tgl

Yes, when I connect an external monitor that have speakers, I have the sound working.

By updating, do you mean what I’m trying to do?

Regarding this… Besides running sudo dmesg | grep quirk what should I do exactly?

Also, I run the following command cat /sys/class/sound/hwC0D0/subsystem_id which should tell the vendor:model reference…
In my case I got 0x10431a9c where the 1043 seems to correspond to Asus… But the 1a9c is rather the NVidia thing if I look at the lspci -k:

0000:01:00.0 VGA compatible controller: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] (rev a1)
	DeviceName: VGA
	Subsystem: ASUSTeK Computer Inc. Device 1a9c
	Kernel driver in use: nvidia
	Kernel modules: nouveau, nvidia_drm, nvidia
0000:01:00.1 Audio device: NVIDIA Corporation GA106 High Definition Audio Controller (rev a1)
	Subsystem: ASUSTeK Computer Inc. Device 1a9c
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel