Skip to content

Commit 088fb4e

Browse files
rfvirgilbroonie
authored andcommitted
ALSA: doc: cs35l56: Add information about Cirrus Logic CS35L54/56/57
Add documentation for the Cirrus Logic CS35L54/56/57 amps, which are all managed by the cs35l56 drivers. The aim and scope of this documentation is to provide troubleshooting information for end-users. Signed-off-by: Richard Fitzgerald <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent 704dbe9 commit 088fb4e

File tree

3 files changed

+302
-0
lines changed

3 files changed

+302
-0
lines changed
Lines changed: 292 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,292 @@
1+
.. SPDX-License-Identifier: GPL-2.0-only
2+
3+
=====================================================================
4+
Audio drivers for Cirrus Logic CS35L54/56/57 Boosted Smart Amplifiers
5+
=====================================================================
6+
:Copyright: 2025 Cirrus Logic, Inc. and
7+
Cirrus Logic International Semiconductor Ltd.
8+
9+
10+
11+
Summary
12+
=======
13+
14+
The high-level summary of this document is:
15+
16+
**If you have a laptop that uses CS35L54/56/57 amplifiers but audio is not
17+
working, DO NOT ATTEMPT TO USE FIRMWARE AND SETTINGS FROM ANOTHER LAPTOP,
18+
EVEN IF THAT LAPTOP SEEMS SIMILAR.**
19+
20+
The CS35L54/56/57 amplifiers must be correctly configured for the power
21+
supply voltage, speaker impedance, maximum speaker voltage/current, and
22+
other external hardware connections.
23+
24+
The amplifiers feature advanced boost technology that increases the voltage
25+
used to drive the speakers, while proprietary speaker protection algorithms
26+
allow these boosted amplifiers to push the limits of the speakers without
27+
causing damage. These **must** be configured correctly.
28+
29+
Supported Cirrus Logic amplifiers
30+
---------------------------------
31+
32+
The cs35l56 drivers support:
33+
34+
* CS35L54
35+
* CS35L56
36+
* CS35L57
37+
38+
There are two drivers in the kernel
39+
40+
*For systems using SoundWire*: sound/soc/codecs/cs35l56.c and associated files
41+
42+
*For systems using HDA*: sound/pci/hda/cs35l56_hda.c
43+
44+
Firmware
45+
========
46+
47+
The amplifier is controlled and managed by firmware running on the internal
48+
DSP. Firmware files are essential to enable the full capabilities of the
49+
amplifier.
50+
51+
Firmware is distributed in the linux-firmware repository:
52+
https://gitlab.com/kernel-firmware/linux-firmware.git
53+
54+
On most SoundWire systems the amplifier has a default minimum capability to
55+
produce audio. However this will be
56+
57+
* at low volume, to protect the speakers, since the speaker specifications
58+
and power supply voltages are unknown.
59+
* a mono mix of left and right channels.
60+
61+
On some SoundWire systems that have both CS42L43 and CS35L56/57 the CS35L56/57
62+
receive their audio from the CS42L43 instead of directly from the host
63+
SoundWire interface. These systems can be identified by the CS42L43 showing
64+
in dmesg as a SoundWire device, but the CS35L56/57 as SPI. On these systems
65+
the firmware is *mandatory* to enable receiving the audio from the CS42L43.
66+
67+
On HDA systems the firmware is *mandatory* to enable HDA bridge mode. There
68+
will not be any audio from the amplifiers without firmware.
69+
70+
Cirrus Logic firmware files
71+
---------------------------
72+
73+
Each amplifier requires two firmware files. One file has a .wmfw suffix, the
74+
other has a .bin suffix.
75+
76+
The firmware is customized by the OEM to match the hardware of each laptop,
77+
and the firmware is specific to that laptop. Because of this, there are many
78+
firmware files in linux-firmware for these amplifiers. Firmware files are
79+
**not interchangeable between laptops**.
80+
81+
Cirrus Logic submits files for known laptops to the upstream linux-firmware
82+
repository. Providing Cirrus Logic is aware of a particular laptop and has
83+
permission from the manufacturer to publish the firmware, it will be pushed
84+
to linux-firmware. You may need to upgrade to a newer release of
85+
linux-firmware to obtain the firmware for your laptop.
86+
87+
**Important:** the Makefile for linux-firmware creates symlinks that are listed
88+
in the WHENCE file. These symlinks are required for the CS35L56 driver to be
89+
able to load the firmware.
90+
91+
How do I know which firmware file I should have?
92+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
93+
All firmware file names are qualified with a unique "system ID". On normal
94+
x86 PCs with PCI audio this is the Vendor Subsystem ID (SSID) of the host
95+
PCI audio interface.
96+
97+
The SSID can be viewed using the lspci tool::
98+
99+
lspci -v -nn | grep -A2 -i audio
100+
0000:00:1f.3 Audio device [0403]: Intel Corporation Meteor Lake-P HD Audio Controller [8086:7e28]
101+
Subsystem: Dell Meteor Lake-P HD Audio Controller [1028:0c63]
102+
103+
In this example the SSID is 10280c63.
104+
105+
The format of the firmware file names is:
106+
107+
cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampN
108+
109+
Where:
110+
111+
* cs35lxx-b0 is the amplifier model and silicon revision. This information
112+
is logged by the driver during initialization.
113+
* SSID is the 8-digit hexadecimal SSID value.
114+
* ampN is the amplifier number (for example amp1). This is the same as
115+
the prefix on the ALSA control names except that it is always lower-case
116+
in the file name.
117+
* spkidX is an optional part, used for laptops that have firmware
118+
configurations for different makes and models of internal speakers.
119+
120+
Sound Open Firmware and ALSA topology files
121+
-------------------------------------------
122+
123+
All SoundWire systems will require a Sound Open Firmware (SOF) for the
124+
host CPU audio DSP, together with an ALSA topology file (.tplg).
125+
126+
The SOF firmware will usually be provided by the manufacturer of the host
127+
CPU (i.e. Intel or AMD). The .tplg file is normally part of the SOF firmware
128+
release.
129+
130+
SOF binary builds are available from: https://github.com/thesofproject/sof-bin/releases
131+
132+
The main SOF source is here: https://github.com/thesofproject
133+
134+
ALSA-ucm configurations
135+
-----------------------
136+
Typically an appropriate ALSA-ucm configuration file is needed for
137+
use-case managers and audio servers such as PipeWire.
138+
139+
Configuration files are available from the alsa-ucm-conf repository:
140+
https://git.alsa-project.org/?p=alsa-ucm-conf.git
141+
142+
Kernel log messages
143+
===================
144+
145+
SoundWire
146+
---------
147+
A successful initialization will look like this (this will be repeated for
148+
each amplifier)::
149+
150+
[ 7.568374] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_P not found, using dummy regulator
151+
[ 7.605208] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_IO not found, using dummy regulator
152+
[ 7.605313] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_A not found, using dummy regulator
153+
[ 7.939279] cs35l56 sdw:0:0:01fa:3556:01:0: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0)
154+
[ 7.947844] cs35l56 sdw:0:0:01fa:3556:01:0: Slave 4 state check1: UNATTACHED, status was 1
155+
[ 8.740280] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_B not found, using dummy regulator
156+
[ 8.740552] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_AMP not found, using dummy regulator
157+
[ 9.242164] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw: format 3 timestamp 0x66b2b872
158+
[ 9.242173] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw: Tue 05 Dec 2023 21:37:21 GMT Standard Time
159+
[ 9.991709] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: Firmware: 1a00d6 vendor: 0x2 v3.11.23, 41 algorithms
160+
[10.039098] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.bin: v3.11.23
161+
[10.879235] cs35l56 sdw:0:0:01fa:3556:01:0: Slave 4 state check1: UNATTACHED, status was 1
162+
[11.401536] cs35l56 sdw:0:0:01fa:3556:01:0: Calibration applied
163+
164+
HDA
165+
---
166+
A successful initialization will look like this (this will be repeated for
167+
each amplifier)::
168+
169+
[ 6.306475] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0)
170+
[ 6.613892] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP system name: 'xxxxxxxx', amp name: 'AMP1'
171+
[ 8.266660] snd_hda_codec_cs8409 ehdaudio0D0: bound i2c-CSC3556:00-cs35l56-hda.0 (ops cs35l56_hda_comp_ops [snd_hda_scodec_cs35l56])
172+
[ 8.287525] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw: format 3 timestamp 0x66b2b872
173+
[ 8.287528] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw: Tue 05 Dec 2023 21:37:21 GMT Standard Time
174+
[ 9.984335] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: Firmware: 1a00d6 vendor: 0x2 v3.11.23, 41 algorithms
175+
[10.085797] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.bin: v3.11.23
176+
[10.655237] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: Calibration applied
177+
178+
Important messages
179+
~~~~~~~~~~~~~~~~~~
180+
Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0)
181+
Shows that the driver has been able to read device ID registers from the
182+
amplifier.
183+
184+
* The actual amplifier type and silicon revision (CS35L56 B0 in this
185+
example) is shown, as read from the amplifier identification registers.
186+
* (patched=0) is normal, and indicates that the amplifier has been hard
187+
reset and is running default ROM firmware.
188+
* (patched=1) means that something has previously downloaded firmware
189+
to the amplifier and the driver does not have control of the RESET
190+
signal to be able to replace this preloaded firmware. This is normal
191+
for systems where the BIOS downloads firmware to the amplifiers
192+
before OS boot.
193+
This status can also be seen if the cs35l56 kernel module is unloaded
194+
and reloaded on a system where the driver does not have control of
195+
RESET. SoundWire systems typically do not give the driver control of
196+
RESET and only a BIOS (re)boot can reset the amplifiers.
197+
198+
DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw
199+
Shows that a .wmfw firmware file was found and downloaded.
200+
201+
DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.bin
202+
Shows that a .bin firmware file was found and downloaded.
203+
204+
Calibration applied
205+
Factory calibration data in EFI was written to the amplifier.
206+
207+
Error messages
208+
==============
209+
This section explains some of the error messages that the driver can log.
210+
211+
Algorithm coefficient version %d.%d.%d but expected %d.%d.%d
212+
The version of the .bin file content does not match the loaded firmware.
213+
Caused by mismatched .wmfw and .bin file, or .bin file was found but
214+
.wmfw was not.
215+
216+
No %s for algorithm %x
217+
The version of the .bin file content does not match the loaded firmware.
218+
Caused by mismatched .wmfw and .bin file, or .bin file was found but
219+
.wmfw was not.
220+
221+
.bin file required but not found
222+
HDA driver did not find a .bin file that matches this hardware.
223+
224+
Calibration disabled due to missing firmware controls
225+
Driver was not able to write EFI calibration data to firmware registers.
226+
This typically means that either:
227+
228+
* The driver did not find a suitable wmfw for this hardware, or
229+
* The amplifier has already been patched with firmware by something
230+
previously, and the driver does not have control of a hard RESET line
231+
to be able to reset the amplifier and download the firmware files it
232+
found. This situation is indicated by the device identification
233+
string in the kernel log shows "(patched=1)"
234+
235+
Failed to write calibration
236+
Same meaning and cause as "Calibration disabled due to missing firmware
237+
controls"
238+
239+
Failed to read calibration data from EFI
240+
Factory calibration data in EFI is missing, empty or corrupt.
241+
This is most likely to be cause by accidentally deleting the file from
242+
the EFI filesystem.
243+
244+
No calibration for silicon ID
245+
The factory calibration data in EFI does not match this hardware.
246+
The most likely cause is that an amplifier has been replaced on the
247+
motherboard without going through manufacturer calibration process to
248+
generate calibration data for the new amplifier.
249+
250+
Did not find any buses for CSCxxxx
251+
Only on HDA systems. The HDA codec driver found an ACPI entry for
252+
Cirrus Logic companion amps, but could not enumerate the ACPI entries for
253+
the I2C/SPI buses. The most likely cause of this is that:
254+
255+
* The relevant bus driver (I2C or SPI) is not part of the kernel.
256+
* The HDA codec driver was built-in to the kernel but the I2C/SPI
257+
bus driver is a module and so the HDA codec driver cannot call the
258+
bus driver functions.
259+
260+
init_completion timed out
261+
The SoundWire bus controller (host end) did not enumerate the amplifier.
262+
In other words, the ACPI says there is an amplifier but for some reason
263+
it was not detected on the bus.
264+
265+
No AF01 node
266+
Indicates an error in ACPI. A SoundWire system should have a Device()
267+
node named "AF01" but it was not found.
268+
269+
Failed to get spk-id-gpios
270+
ACPI says that the driver should request a GPIO but the driver was not
271+
able to get that GPIO. The most likely cause is that the kernel does not
272+
include the correct GPIO or PINCTRL driver for this system.
273+
274+
Failed to read spk-id
275+
ACPI says that the driver should request a GPIO but the driver was not
276+
able to read that GPIO.
277+
278+
Unexpected spk-id element count
279+
AF01 contains more speaker ID GPIO entries than the driver supports
280+
281+
Overtemp error
282+
Amplifier overheat protection was triggered and the amplifier shut down
283+
to protect itself.
284+
285+
Amp short error
286+
Amplifier detected a short-circuit on the speaker output pins and shut
287+
down for protection. This would normally indicate a damaged speaker.
288+
289+
Hibernate wake failed
290+
The driver tried to wake the amplifier from its power-saving state but
291+
did not see the expected responses from the amplifier. This can be caused
292+
by using firmware that does not match the hardware.

Documentation/sound/codecs/index.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
3+
Codec-Specific Information
4+
==========================
5+
6+
.. toctree::
7+
:maxdepth: 2
8+
9+
cs35l56

MAINTAINERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5469,6 +5469,7 @@ L: [email protected]
54695469
54705470
S: Maintained
54715471
F: Documentation/devicetree/bindings/sound/cirrus,cs*
5472+
F: Documentation/sound/codecs/cs*
54725473
F: drivers/mfd/cs42l43*
54735474
F: drivers/pinctrl/cirrus/pinctrl-cs42l43*
54745475
F: drivers/spi/spi-cs42l43*

0 commit comments

Comments
 (0)