[BUG] cirrus: cs35l41 tuning alias for SSID 103C8C4D mutes left speaker

Luca Caffarelli <[email protected]> Sun, 2 Aug 2026 15:23:09 +0200
Newsgroups org.kernel.lore.linux-firmware,org.alsa-project.alsa-devel
Message-ID <CAPGq_Y+g12MHPm-N+jO=6=xNn1UhL_i5J-WwH+6G6quVwuhJqQ@mail.gmail.com>
--00000000000051947e065810539b
Content-Type: text/plain; charset="UTF-8"

Hi,

The CS35L41 tuning files aliased for SSID 103C8C4D silence the left speaker
entirely on HP OMEN 16-u1xxx. Using the generic firmware instead makes both
channels work, so this looks like an incorrect alias rather than a hardware
or driver problem.

System
------
Machine:        HP OMEN by HP Transcend Gaming Laptop 16-u1xxx (SKU A18V4EA#ABZ)
BIOS:           F.29, 2026-03-31
Audio:          Realtek ALC245 (10ec:0245), subsystem 103c:8c4d
Amps:           2x Cirrus Logic CS35L41 (35a40) rev B2, i2c CSC3551,
shared reset
Distro/kernel:  Fedora 43, kernel 7.1.3-101.fc43.x86_64
linux-firmware: 20260622

Current aliases
---------------
cs35l41-dsp1-spk-prot-103c8c4d.wmfw.xz
    -> cs35l41/v6.61.1/halo_cspl_RAM_revB2_29.63.1.wmfw.xz
cs35l41-dsp1-spk-prot-103c8c4d-spkid1-l0.bin.xz
    -> cs35l41-dsp1-spk-prot-103c8bb3-spkid1-l0.bin.xz
cs35l41-dsp1-spk-prot-103c8c4d-spkid1-r0.bin.xz
    -> cs35l41-dsp1-spk-prot-103c8bb3-spkid1-r0.bin.xz

The tuning bins are aliased to those of a different machine, 103C8BB3.

Symptom
-------
The left speaker produces no output at all. The right speaker works normally.
The driver reports no error: both amps probe, load firmware, apply calibration
and bind successfully, with identical parameters.

  cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1:
cirrus/cs35l41-dsp1-spk-prot-103c8c4d.wmfw: format 3 timestamp
0x6128e16b
  cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Calibration applied: R0=5407
  cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Firmware Loaded - Type:
spk-prot, Gain: 14
  cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: CS35L41 Bound - SSID:
103C8C4D, BST: 0, VSPK: 0, CH: L, FW EN: 1, SPKID: 1
  cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Calibration applied: R0=5550
  cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Firmware Loaded - Type:
spk-prot, Gain: 14
  cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: CS35L41 Bound - SSID:
103C8C4D, BST: 0, VSPK: 0, CH: R, FW EN: 1, SPKID: 1

ALSA and PipeWire are balanced (both channels 0.00 dB, balance 0.00), and the
codec pin node 0x17 shows Amp-Out vals [0x00 0x00] on both channels.

What I tested
-------------
1. Stock aliases (wmfw 103c8c4d + bins from 103c8bb3, l0 and r0):
   left channel silent.

2. Both amps forced to load the same tuning bin (repointed the l0 symlink at
   the 103c8bb3 r0 bin, so both amps get byte-identical firmware and tuning):
   left channel still silent. This rules out the per-channel bin as the cause.

3. Generic firmware (cirrus/cs35l41-dsp1-spk-prot.wmfw, timestamp 0x62b5c26c,
   plus cirrus/cs35l41-dsp1-spk-prot.bin): both channels work and are
   balanced, at a noticeably lower output level.

Test 3 shows the left speaker and its amp are functional, so this is not a
hardware fault. Test 2 shows the tuning bin is not the discriminating factor.
The remaining difference between the two amps is the factory calibration read
from NVRAM, R0=5407 (left) against R0=5550 (right). My guess is that the
103C8BB3 tuning constants, combined with the model wmfw, put R0=5407 outside
the expected range for the protection algorithm and the channel gets muted,
but I have not confirmed that from the firmware internals.

Request
-------
Could the correct CS35L41 tuning for SSID 103C8C4D be added? If it is not
available, dropping the 103C8BB3 alias would be preferable to the current
state: users would fall back to the generic firmware, which produces working
stereo output instead of a dead left channel.

My current workaround is to shadow the model-specific names with the generic
firmware under /lib/firmware/updates/cirrus/.

Happy to run further tests or provide additional logs.

Thanks,
Luca Caffarelli

--00000000000051947e065810539b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><pre>Hi,<br><br>The CS35L41 tuning files aliased for SSID =
103C8C4D silence the left speaker<br>entirely on HP OMEN 16-u1xxx. Using th=
e generic firmware instead makes both<br>channels work, so this looks like =
an incorrect alias rather than a hardware<br>or driver problem.<br><br>Syst=
em<br>------<br>Machine: =C2=A0 =C2=A0 =C2=A0 =C2=A0HP OMEN by HP Transcend=
 Gaming Laptop 16-u1xxx (SKU A18V4EA#ABZ)<br>BIOS: =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 F.29, 2026-03-31<br>Audio: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Rea=
ltek ALC245 (10ec:0245), subsystem 103c:8c4d<br>Amps: =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 2x Cirrus Logic CS35L41 (35a40) rev B2, i2c CSC3551, shared r=
eset<br>Distro/kernel: =C2=A0Fedora 43, kernel 7.1.3-101.fc43.x86_64<br>lin=
ux-firmware: 20260622<br><br>Current aliases<br>---------------<br>cs35l41-=
dsp1-spk-prot-103c8c4d.wmfw.xz<br>=C2=A0 =C2=A0 -&gt; cs35l41/v6.61.1/halo_=
cspl_RAM_revB2_29.63.1.wmfw.xz<br>cs35l41-dsp1-spk-prot-103c8c4d-spkid1-l0.=
bin.xz<br>=C2=A0 =C2=A0 -&gt; cs35l41-dsp1-spk-prot-103c8bb3-spkid1-l0.bin.=
xz<br>cs35l41-dsp1-spk-prot-103c8c4d-spkid1-r0.bin.xz<br>=C2=A0 =C2=A0 -&gt=
; cs35l41-dsp1-spk-prot-103c8bb3-spkid1-r0.bin.xz<br><br>The tuning bins ar=
e aliased to those of a different machine, 103C8BB3.<br><br>Symptom<br>----=
---<br>The left speaker produces no output at all. The right speaker works =
normally.<br>The driver reports no error: both amps probe, load firmware, a=
pply calibration<br>and bind successfully, with identical parameters.<br><b=
r>=C2=A0 cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp=
1-spk-prot-103c8c4d.wmfw: format 3 timestamp 0x6128e16b<br>=C2=A0 cs35l41-h=
da i2c-CSC3551:00-cs35l41-hda.0: Calibration applied: R0=3D5407<br>=C2=A0 c=
s35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Firmware Loaded - Type: spk-prot, =
Gain: 14<br>=C2=A0 cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: CS35L41 Bound =
- SSID: 103C8C4D, BST: 0, VSPK: 0, CH: L, FW EN: 1, SPKID: 1<br>=C2=A0 cs35=
l41-hda i2c-CSC3551:00-cs35l41-hda.1: Calibration applied: R0=3D5550<br>=C2=
=A0 cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Firmware Loaded - Type: spk-p=
rot, Gain: 14<br>=C2=A0 cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: CS35L41 B=
ound - SSID: 103C8C4D, BST: 0, VSPK: 0, CH: R, FW EN: 1, SPKID: 1<br><br>AL=
SA and PipeWire are balanced (both channels 0.00 dB, balance 0.00), and the=
<br>codec pin node 0x17 shows Amp-Out vals [0x00 0x00] on both channels.<br=
><br>What I tested<br>-------------<br>1. Stock aliases (wmfw 103c8c4d + bi=
ns from 103c8bb3, l0 and r0):<br>=C2=A0 =C2=A0left channel silent.<br><br>2=
. Both amps forced to load the same tuning bin (repointed the l0 symlink at=
<br>=C2=A0 =C2=A0the 103c8bb3 r0 bin, so both amps get byte-identical firmw=
are and tuning):<br>=C2=A0 =C2=A0left channel still silent. This rules out =
the per-channel bin as the cause.<br><br>3. Generic firmware (cirrus/cs35l4=
1-dsp1-spk-prot.wmfw, timestamp 0x62b5c26c,<br>=C2=A0 =C2=A0plus cirrus/cs3=
5l41-dsp1-spk-prot.bin): both channels work and are<br>=C2=A0 =C2=A0balance=
d, at a noticeably lower output level.<br><br>Test 3 shows the left speaker=
 and its amp are functional, so this is not a<br>hardware fault. Test 2 sho=
ws the tuning bin is not the discriminating factor.<br>The remaining differ=
ence between the two amps is the factory calibration read<br>from NVRAM, R0=
=3D5407 (left) against R0=3D5550 (right). My guess is that the<br>103C8BB3 =
tuning constants, combined with the model wmfw, put R0=3D5407 outside<br>th=
e expected range for the protection algorithm and the channel gets muted,<b=
r>but I have not confirmed that from the firmware internals.<br><br>Request=
<br>-------<br>Could the correct CS35L41 tuning for SSID 103C8C4D be added?=
 If it is not<br>available, dropping the 103C8BB3 alias would be preferable=
 to the current<br>state: users would fall back to the generic firmware, wh=
ich produces working<br>stereo output instead of a dead left channel.<br><b=
r>My current workaround is to shadow the model-specific names with the gene=
ric<br>firmware under /lib/firmware/updates/cirrus/.<br><br>Happy to run fu=
rther tests or provide additional logs.<br><br>Thanks,<br>Luca Caffarelli</=
pre></div>

--00000000000051947e065810539b--