Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20250108141045.1032-1-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Richard Fitzgerald and committed by
Mark Brown
088fb4ee 704dbe97

+302
+292
Documentation/sound/codecs/cs35l56.rst
··· 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 + Contact: patches@opensource.cirrus.com 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.
+9
Documentation/sound/codecs/index.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + Codec-Specific Information 4 + ========================== 5 + 6 + .. toctree:: 7 + :maxdepth: 2 8 + 9 + cs35l56
+1
MAINTAINERS
··· 5469 5469 L: patches@opensource.cirrus.com 5470 5470 S: Maintained 5471 5471 F: Documentation/devicetree/bindings/sound/cirrus,cs* 5472 + F: Documentation/sound/codecs/cs* 5472 5473 F: drivers/mfd/cs42l43* 5473 5474 F: drivers/pinctrl/cirrus/pinctrl-cs42l43* 5474 5475 F: drivers/spi/spi-cs42l43*