sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget(/translations/zh_CN/sound/codecs/cs35l56modnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/sound/codecs/cs35l56modnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/sound/codecs/cs35l56modnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/sound/codecs/cs35l56modnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/sound/codecs/cs35l56modnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/sound/codecs/cs35l56modnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h%SPDX-License-Identifier: GPL-2.0-onlyh]h%SPDX-License-Identifier: GPL-2.0-only}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhB/var/lib/git/docbuild/linux/Documentation/sound/codecs/cs35l56.rsthKubhsection)}(hhh](htitle)}(hEAudio drivers for Cirrus Logic CS35L54/56/57 Boosted Smart Amplifiersh]hEAudio drivers for Cirrus Logic CS35L54/56/57 Boosted Smart Amplifiers}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(h Copyrighth]h Copyright}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(hJ2025 Cirrus Logic, Inc. and Cirrus Logic International Semiconductor Ltd. h]h paragraph)}(hI2025 Cirrus Logic, Inc. and Cirrus Logic International Semiconductor Ltd.h]hI2025 Cirrus Logic, Inc. and Cirrus Logic International Semiconductor Ltd.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(h&Contact: patches@opensource.cirrus.comh](h Contact: }(hj hhhNhNubh reference)}(hpatches@opensource.cirrus.comh]hpatches@opensource.cirrus.com}(hjhhhNhNubah}(h]h ]h"]h$]h&]refuri$mailto:patches@opensource.cirrus.comuh1jhj ubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hSummaryh]hSummary}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hhhhhK ubh)}(h+The high-level summary of this document is:h]h+The high-level summary of this document is:}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj+hhubh)}(h**If you have a laptop that uses CS35L54/56/57 amplifiers but audio is not working, DO NOT ATTEMPT TO USE FIRMWARE AND SETTINGS FROM ANOTHER LAPTOP, EVEN IF THAT LAPTOP SEEMS SIMILAR.**h]hstrong)}(hjLh]hIf you have a laptop that uses CS35L54/56/57 amplifiers but audio is not working, DO NOT ATTEMPT TO USE FIRMWARE AND SETTINGS FROM ANOTHER LAPTOP, EVEN IF THAT LAPTOP SEEMS SIMILAR.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jNhjJubah}(h]h ]h"]h$]h&]uh1hhhhKhj+hhubh)}(hThe CS35L54/56/57 amplifiers must be correctly configured for the power supply voltage, speaker impedance, maximum speaker voltage/current, and other external hardware connections.h]hThe CS35L54/56/57 amplifiers must be correctly configured for the power supply voltage, speaker impedance, maximum speaker voltage/current, and other external hardware connections.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj+hhubh)}(hXThe amplifiers feature advanced boost technology that increases the voltage used to drive the speakers, while proprietary speaker protection algorithms allow these boosted amplifiers to push the limits of the speakers without causing damage. These **must** be configured correctly.h](hThe amplifiers feature advanced boost technology that increases the voltage used to drive the speakers, while proprietary speaker protection algorithms allow these boosted amplifiers to push the limits of the speakers without causing damage. These }(hjqhhhNhNubjO)}(h**must**h]hmust}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jNhjqubh be configured correctly.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj+hhubh)}(hhh](h)}(h!Supported Cirrus Logic amplifiersh]h!Supported Cirrus Logic amplifiers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hThe cs35l56 drivers support:h]hThe cs35l56 drivers support:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjhhubh bullet_list)}(hhh](h list_item)}(hCS35L54h]h)}(hjh]hCS35L54}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hCS35L56h]h)}(hjh]hCS35L56}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hCS35L57 h]h)}(hCS35L57h]hCS35L57}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1jhhhK"hjhhubh)}(h#There are two drivers in the kernelh]h#There are two drivers in the kernel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjhhubh)}(hN*For systems using SoundWire*: sound/soc/codecs/cs35l56.c and associated filesh](hemphasis)}(h*For systems using SoundWire*h]hFor systems using SoundWire}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh1: sound/soc/codecs/cs35l56.c and associated files}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK(hjhhubh)}(h4*For systems using HDA*: sound/pci/hda/cs35l56_hda.ch](j)}(h*For systems using HDA*h]hFor systems using HDA}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh: sound/pci/hda/cs35l56_hda.c}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK*hjhhubeh}(h]!supported-cirrus-logic-amplifiersah ]h"]!supported cirrus logic amplifiersah$]h&]uh1hhj+hhhhhKubeh}(h]summaryah ]h"]summaryah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hFirmwareh]hFirmware}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hhhhhK-ubh)}(hThe amplifier is controlled and managed by firmware running on the internal DSP. Firmware files are essential to enable the full capabilities of the amplifier.h]hThe amplifier is controlled and managed by firmware running on the internal DSP. Firmware files are essential to enable the full capabilities of the amplifier.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hj]hhubh)}(hoFirmware is distributed in the linux-firmware repository: https://gitlab.com/kernel-firmware/linux-firmware.gith](h:Firmware is distributed in the linux-firmware repository: }(hj|hhhNhNubj)}(h5https://gitlab.com/kernel-firmware/linux-firmware.gith]h5https://gitlab.com/kernel-firmware/linux-firmware.git}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhj|ubeh}(h]h ]h"]h$]h&]uh1hhhhK3hj]hhubh)}(hoOn most SoundWire systems the amplifier has a default minimum capability to produce audio. However this will beh]hoOn most SoundWire systems the amplifier has a default minimum capability to produce audio. However this will be}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hj]hhubj)}(hhh](j)}(hoat low volume, to protect the speakers, since the speaker specifications and power supply voltages are unknown.h]h)}(hoat low volume, to protect the speakers, since the speaker specifications and power supply voltages are unknown.h]hoat low volume, to protect the speakers, since the speaker specifications and power supply voltages are unknown.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h'a mono mix of left and right channels. h]h)}(h&a mono mix of left and right channels.h]h&a mono mix of left and right channels.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhK9hj]hhubh)}(hXyOn some SoundWire systems that have both CS42L43 and CS35L56/57 the CS35L56/57 receive their audio from the CS42L43 instead of directly from the host SoundWire interface. These systems can be identified by the CS42L43 showing in dmesg as a SoundWire device, but the CS35L56/57 as SPI. On these systems the firmware is *mandatory* to enable receiving the audio from the CS42L43.h](hX>On some SoundWire systems that have both CS42L43 and CS35L56/57 the CS35L56/57 receive their audio from the CS42L43 instead of directly from the host SoundWire interface. These systems can be identified by the CS42L43 showing in dmesg as a SoundWire device, but the CS35L56/57 as SPI. On these systems the firmware is }(hjhhhNhNubj)}(h *mandatory*h]h mandatory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0 to enable receiving the audio from the CS42L43.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK=hj]hhubh)}(hOn HDA systems the firmware is *mandatory* to enable HDA bridge mode. There will not be any audio from the amplifiers without firmware.h](hOn HDA systems the firmware is }(hjhhhNhNubj)}(h *mandatory*h]h mandatory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh] to enable HDA bridge mode. There will not be any audio from the amplifiers without firmware.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChj]hhubh)}(hhh](h)}(hCirrus Logic firmware filesh]hCirrus Logic firmware files}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKGubh)}(heEach amplifier requires two firmware files. One file has a .wmfw suffix, the other has a .bin suffix.h]heEach amplifier requires two firmware files. One file has a .wmfw suffix, the other has a .bin suffix.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhj hhubh)}(hX The firmware is customized by the OEM to match the hardware of each laptop, and the firmware is specific to that laptop. Because of this, there are many firmware files in linux-firmware for these amplifiers. Firmware files are **not interchangeable between laptops**.h](hThe firmware is customized by the OEM to match the hardware of each laptop, and the firmware is specific to that laptop. Because of this, there are many firmware files in linux-firmware for these amplifiers. Firmware files are }(hj?hhhNhNubjO)}(h'**not interchangeable between laptops**h]h#not interchangeable between laptops}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jNhj?ubh.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKLhj hhubh)}(hXZCirrus Logic submits files for known laptops to the upstream linux-firmware repository. Providing Cirrus Logic is aware of a particular laptop and has permission from the manufacturer to publish the firmware, it will be pushed to linux-firmware. You may need to upgrade to a newer release of linux-firmware to obtain the firmware for your laptop.h]hXZCirrus Logic submits files for known laptops to the upstream linux-firmware repository. Providing Cirrus Logic is aware of a particular laptop and has permission from the manufacturer to publish the firmware, it will be pushed to linux-firmware. You may need to upgrade to a newer release of linux-firmware to obtain the firmware for your laptop.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhj hhubh)}(h**Important:** the Makefile for linux-firmware creates symlinks that are listed in the WHENCE file. These symlinks are required for the CS35L56 driver to be able to load the firmware.h](jO)}(h**Important:**h]h Important:}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jNhjmubh the Makefile for linux-firmware creates symlinks that are listed in the WHENCE file. These symlinks are required for the CS35L56 driver to be able to load the firmware.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKWhj hhubh)}(hhh](h)}(h0How do I know which firmware file I should have?h]h0How do I know which firmware file I should have?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK\ubh)}(hAll firmware file names are qualified with a unique "system ID". On normal x86 PCs with PCI audio this is the Vendor Subsystem ID (SSID) of the host PCI audio interface.h]hAll firmware file names are qualified with a unique “system ID”. On normal x86 PCs with PCI audio this is the Vendor Subsystem ID (SSID) of the host PCI audio interface.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjhhubh)}(h-The SSID can be viewed using the lspci tool::h]h,The SSID can be viewed using the lspci tool:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahjhhubh literal_block)}(hlspci -v -nn | grep -A2 -i audio 0000:00:1f.3 Audio device [0403]: Intel Corporation Meteor Lake-P HD Audio Controller [8086:7e28] Subsystem: Dell Meteor Lake-P HD Audio Controller [1028:0c63]h]hlspci -v -nn | grep -A2 -i audio 0000:00:1f.3 Audio device [0403]: Intel Corporation Meteor Lake-P HD Audio Controller [8086:7e28] Subsystem: Dell Meteor Lake-P HD Audio Controller [1028:0c63]}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKchjhhubh)}(h%In this example the SSID is 10280c63.h]h%In this example the SSID is 10280c63.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKghjhhubh)}(h)The format of the firmware file names is:h]h)The format of the firmware file names is:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihjhhubh block_quote)}(h(cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampN h]h)}(h'cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampNh]h'cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhjubah}(h]h ]h"]h$]h&]uh1jhhhKkhjhhubh)}(hWhere:h]hWhere:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjhhubj)}(hX* cs35lxx-b0 is the amplifier model and silicon revision. This information is logged by the driver during initialization. * SSID is the 8-digit hexadecimal SSID value. * ampN is the amplifier number (for example amp1). This is the same as the prefix on the ALSA control names except that it is always lower-case in the file name. * spkidX is an optional part, used for laptops that have firmware configurations for different makes and models of internal speakers. h]j)}(hhh](j)}(hwcs35lxx-b0 is the amplifier model and silicon revision. This information is logged by the driver during initialization.h]h)}(hwcs35lxx-b0 is the amplifier model and silicon revision. This information is logged by the driver during initialization.h]hwcs35lxx-b0 is the amplifier model and silicon revision. This information is logged by the driver during initialization.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h+SSID is the 8-digit hexadecimal SSID value.h]h)}(hj+h]h+SSID is the 8-digit hexadecimal SSID value.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKqhj)ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hampN is the amplifier number (for example amp1). This is the same as the prefix on the ALSA control names except that it is always lower-case in the file name.h]h)}(hampN is the amplifier number (for example amp1). This is the same as the prefix on the ALSA control names except that it is always lower-case in the file name.h]hampN is the amplifier number (for example amp1). This is the same as the prefix on the ALSA control names except that it is always lower-case in the file name.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhj@ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hspkidX is an optional part, used for laptops that have firmware configurations for different makes and models of internal speakers. h]h)}(hspkidX is an optional part, used for laptops that have firmware configurations for different makes and models of internal speakers.h]hspkidX is an optional part, used for laptops that have firmware configurations for different makes and models of internal speakers.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjXubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhhhKohj ubah}(h]h ]h"]h$]h&]uh1jhhhKohjhhubeh}(h]/how-do-i-know-which-firmware-file-i-should-haveah ]h"]0how do i know which firmware file i should have?ah$]h&]uh1hhj hhhhhK\ubeh}(h]cirrus-logic-firmware-filesah ]h"]cirrus logic firmware filesah$]h&]uh1hhj]hhhhhKGubh)}(hhh](h)}(h+Sound Open Firmware and ALSA topology filesh]h+Sound Open Firmware and ALSA topology files}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKyubh)}(hAll SoundWire systems will require a Sound Open Firmware (SOF) for the host CPU audio DSP, together with an ALSA topology file (.tplg).h]hAll SoundWire systems will require a Sound Open Firmware (SOF) for the host CPU audio DSP, together with an ALSA topology file (.tplg).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK{hjhhubh)}(hThe SOF firmware will usually be provided by the manufacturer of the host CPU (i.e. Intel or AMD). The .tplg file is normally part of the SOF firmware release.h]hThe SOF firmware will usually be provided by the manufacturer of the host CPU (i.e. Intel or AMD). The .tplg file is normally part of the SOF firmware release.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjhhubh)}(hWSOF binary builds are available from: https://github.com/thesofproject/sof-bin/releasesh](h&SOF binary builds are available from: }(hjhhhNhNubj)}(h1https://github.com/thesofproject/sof-bin/releasesh]h1https://github.com/thesofproject/sof-bin/releases}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h=The main SOF source is here: https://github.com/thesofprojecth](hThe main SOF source is here: }(hjhhhNhNubj)}(h https://github.com/thesofprojecth]h https://github.com/thesofproject}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]+sound-open-firmware-and-alsa-topology-filesah ]h"]+sound open firmware and alsa topology filesah$]h&]uh1hhj]hhhhhKyubh)}(hhh](h)}(hALSA-ucm configurationsh]hALSA-ucm configurations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hxTypically an appropriate ALSA-ucm configuration file is needed for use-case managers and audio servers such as PipeWire.h]hxTypically an appropriate ALSA-ucm configuration file is needed for use-case managers and audio servers such as PipeWire.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hvConfiguration files are available from the alsa-ucm-conf repository: https://git.alsa-project.org/?p=alsa-ucm-conf.gith](hEConfiguration files are available from the alsa-ucm-conf repository: }(hjhhhNhNubj)}(h1https://git.alsa-project.org/?p=alsa-ucm-conf.gith]h1https://git.alsa-project.org/?p=alsa-ucm-conf.git}(hj"hhhNhNubah}(h]h ]h"]h$]h&]refurij$uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]alsa-ucm-configurationsah ]h"]alsa-ucm configurationsah$]h&]uh1hhj]hhhhhKubeh}(h]firmwareah ]h"]firmwareah$]h&]uh1hhhhhhhhK-ubh)}(hhh](h)}(hKernel log messagesh]hKernel log messages}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhhhhhKubh)}(hhh](h)}(h SoundWireh]h SoundWire}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhhhhhKubh)}(h\A successful initialization will look like this (this will be repeated for each amplifier)::h]h[A successful initialization will look like this (this will be repeated for each amplifier):}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubj)}(hX[ 7.568374] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_P not found, using dummy regulator [ 7.605208] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_IO not found, using dummy regulator [ 7.605313] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_A not found, using dummy regulator [ 7.939279] cs35l56 sdw:0:0:01fa:3556:01:0: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0) [ 7.947844] cs35l56 sdw:0:0:01fa:3556:01:0: Slave 4 state check1: UNATTACHED, status was 1 [ 8.740280] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_B not found, using dummy regulator [ 8.740552] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_AMP not found, using dummy regulator [ 9.242164] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw: format 3 timestamp 0x66b2b872 [ 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 [ 9.991709] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: Firmware: 1a00d6 vendor: 0x2 v3.11.23, 41 algorithms [10.039098] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.bin: v3.11.23 [10.879235] cs35l56 sdw:0:0:01fa:3556:01:0: Slave 4 state check1: UNATTACHED, status was 1 [11.401536] cs35l56 sdw:0:0:01fa:3556:01:0: Calibration appliedh]hX[ 7.568374] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_P not found, using dummy regulator [ 7.605208] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_IO not found, using dummy regulator [ 7.605313] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_A not found, using dummy regulator [ 7.939279] cs35l56 sdw:0:0:01fa:3556:01:0: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0) [ 7.947844] cs35l56 sdw:0:0:01fa:3556:01:0: Slave 4 state check1: UNATTACHED, status was 1 [ 8.740280] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_B not found, using dummy regulator [ 8.740552] cs35l56 sdw:0:0:01fa:3556:01:0: supply VDD_AMP not found, using dummy regulator [ 9.242164] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw: format 3 timestamp 0x66b2b872 [ 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 [ 9.991709] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: Firmware: 1a00d6 vendor: 0x2 v3.11.23, 41 algorithms [10.039098] cs35l56 sdw:0:0:01fa:3556:01:0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.bin: v3.11.23 [10.879235] cs35l56 sdw:0:0:01fa:3556:01:0: Slave 4 state check1: UNATTACHED, status was 1 [11.401536] cs35l56 sdw:0:0:01fa:3556:01:0: Calibration applied}hjwsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjXhhubeh}(h] soundwireah ]h"] soundwireah$]h&]uh1hhjGhhhhhKubh)}(hhh](h)}(hHDAh]hHDA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h\A successful initialization will look like this (this will be repeated for each amplifier)::h]h[A successful initialization will look like this (this will be repeated for each amplifier):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hX[ 6.306475] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0) [ 6.613892] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP system name: 'xxxxxxxx', amp name: 'AMP1' [ 8.266660] snd_hda_codec_cs8409 ehdaudio0D0: bound i2c-CSC3556:00-cs35l56-hda.0 (ops cs35l56_hda_comp_ops [snd_hda_scodec_cs35l56]) [ 8.287525] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw: format 3 timestamp 0x66b2b872 [ 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 [ 9.984335] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: Firmware: 1a00d6 vendor: 0x2 v3.11.23, 41 algorithms [10.085797] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.bin: v3.11.23 [10.655237] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: Calibration appliedh]hX[ 6.306475] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0) [ 6.613892] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP system name: 'xxxxxxxx', amp name: 'AMP1' [ 8.266660] snd_hda_codec_cs8409 ehdaudio0D0: bound i2c-CSC3556:00-cs35l56-hda.0 (ops cs35l56_hda_comp_ops [snd_hda_scodec_cs35l56]) [ 8.287525] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw: format 3 timestamp 0x66b2b872 [ 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 [ 9.984335] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: Firmware: 1a00d6 vendor: 0x2 v3.11.23, 41 algorithms [10.085797] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.bin: v3.11.23 [10.655237] cs35l56-hda i2c-CSC3556:00-cs35l56-hda.0: Calibration applied}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(hhh](h)}(hImportant messagesh]hImportant messages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubhdefinition_list)}(hhh](hdefinition_list_item)}(hXCirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0) Shows that the driver has been able to read device ID registers from the amplifier. * The actual amplifier type and silicon revision (CS35L56 B0 in this example) is shown, as read from the amplifier identification registers. * (patched=0) is normal, and indicates that the amplifier has been hard reset and is running default ROM firmware. * (patched=1) means that something has previously downloaded firmware to the amplifier and the driver does not have control of the RESET signal to be able to replace this preloaded firmware. This is normal for systems where the BIOS downloads firmware to the amplifiers before OS boot. This status can also be seen if the cs35l56 kernel module is unloaded and reloaded on a system where the driver does not have control of RESET. SoundWire systems typically do not give the driver control of RESET and only a BIOS (re)boot can reset the amplifiers. h](hterm)}(h5Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0)h]h5Cirrus Logic CS35L56 Rev B0 OTP3 fw:3.4.4 (patched=0)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubh definition)}(hhh](h)}(hSShows that the driver has been able to read device ID registers from the amplifier.h]hSShows that the driver has been able to read device ID registers from the amplifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(hX9* The actual amplifier type and silicon revision (CS35L56 B0 in this example) is shown, as read from the amplifier identification registers. * (patched=0) is normal, and indicates that the amplifier has been hard reset and is running default ROM firmware. * (patched=1) means that something has previously downloaded firmware to the amplifier and the driver does not have control of the RESET signal to be able to replace this preloaded firmware. This is normal for systems where the BIOS downloads firmware to the amplifiers before OS boot. This status can also be seen if the cs35l56 kernel module is unloaded and reloaded on a system where the driver does not have control of RESET. SoundWire systems typically do not give the driver control of RESET and only a BIOS (re)boot can reset the amplifiers. h]j)}(hhh](j)}(hThe actual amplifier type and silicon revision (CS35L56 B0 in this example) is shown, as read from the amplifier identification registers.h]h)}(hThe actual amplifier type and silicon revision (CS35L56 B0 in this example) is shown, as read from the amplifier identification registers.h]hThe actual amplifier type and silicon revision (CS35L56 B0 in this example) is shown, as read from the amplifier identification registers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hp(patched=0) is normal, and indicates that the amplifier has been hard reset and is running default ROM firmware.h]h)}(hp(patched=0) is normal, and indicates that the amplifier has been hard reset and is running default ROM firmware.h]hp(patched=0) is normal, and indicates that the amplifier has been hard reset and is running default ROM firmware.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hX#(patched=1) means that something has previously downloaded firmware to the amplifier and the driver does not have control of the RESET signal to be able to replace this preloaded firmware. This is normal for systems where the BIOS downloads firmware to the amplifiers before OS boot. This status can also be seen if the cs35l56 kernel module is unloaded and reloaded on a system where the driver does not have control of RESET. SoundWire systems typically do not give the driver control of RESET and only a BIOS (re)boot can reset the amplifiers. h]h)}(hX"(patched=1) means that something has previously downloaded firmware to the amplifier and the driver does not have control of the RESET signal to be able to replace this preloaded firmware. This is normal for systems where the BIOS downloads firmware to the amplifiers before OS boot. This status can also be seen if the cs35l56 kernel module is unloaded and reloaded on a system where the driver does not have control of RESET. SoundWire systems typically do not give the driver control of RESET and only a BIOS (re)boot can reset the amplifiers.h]hX"(patched=1) means that something has previously downloaded firmware to the amplifier and the driver does not have control of the RESET signal to be able to replace this preloaded firmware. This is normal for systems where the BIOS downloads firmware to the amplifiers before OS boot. This status can also be seen if the cs35l56 kernel module is unloaded and reloaded on a system where the driver does not have control of RESET. SoundWire systems typically do not give the driver control of RESET and only a BIOS (re)boot can reset the amplifiers.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hkDSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw Shows that a .wmfw firmware file was found and downloaded. h](j)}(h/DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfwh]h/DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx.wmfw}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj`ubj)}(hhh]h)}(h:Shows that a .wmfw firmware file was found and downloaded.h]h:Shows that a .wmfw firmware file was found and downloaded.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjrubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hnDSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.bin Shows that a .bin firmware file was found and downloaded. h](j)}(h3DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.binh]h3DSP1: cirrus/cs35l56-b0-dsp1-misc-xxxxxxxx-amp1.bin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hhh]h)}(h9Shows that a .bin firmware file was found and downloaded.h]h9Shows that a .bin firmware file was found and downloaded.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hRCalibration applied Factory calibration data in EFI was written to the amplifier. h](j)}(hCalibration appliedh]hCalibration applied}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hhh]h)}(h=Factory calibration data in EFI was written to the amplifier.h]h=Factory calibration data in EFI was written to the amplifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]important-messagesah ]h"]important messagesah$]h&]uh1hhjhhhhhKubeh}(h]hdaah ]h"]hdaah$]h&]uh1hhjGhhhhhKubeh}(h]kernel-log-messagesah ]h"]kernel log messagesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hError messagesh]hError messages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hIThis section explains some of the error messages that the driver can log.h]hIThis section explains some of the error messages that the driver can log.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(hhh](j)}(hAlgorithm coefficient version %d.%d.%d but expected %d.%d.%d The version of the .bin file content does not match the loaded firmware. Caused by mismatched .wmfw and .bin file, or .bin file was found but .wmfw was not. h](j)}(h hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj; ubah}(h]h ]h"]h$]h&]uh1jhj) ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj*hhubj)}(h{No AF01 node Indicates an error in ACPI. A SoundWire system should have a Device() node named "AF01" but it was not found. h](j)}(h No AF01 nodeh]h No AF01 node}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hjX ubj)}(hhh]h)}(hmIndicates an error in ACPI. A SoundWire system should have a Device() node named "AF01" but it was not found.h]hqIndicates an error in ACPI. A SoundWire system should have a Device() node named “AF01” but it was not found.}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjj ubah}(h]h ]h"]h$]h&]uh1jhjX ubeh}(h]h ]h"]h$]h&]uh1jhhhM hj*hhubj)}(hFailed to get spk-id-gpios ACPI says that the driver should request a GPIO but the driver was not able to get that GPIO. The most likely cause is that the kernel does not include the correct GPIO or PINCTRL driver for this system. h](j)}(hFailed to get spk-id-gpiosh]hFailed to get spk-id-gpios}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj ubj)}(hhh]h)}(hACPI says that the driver should request a GPIO but the driver was not able to get that GPIO. The most likely cause is that the kernel does not include the correct GPIO or PINCTRL driver for this system.h]hACPI says that the driver should request a GPIO but the driver was not able to get that GPIO. The most likely cause is that the kernel does not include the correct GPIO or PINCTRL driver for this system.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj*hhubj)}(huFailed to read spk-id ACPI says that the driver should request a GPIO but the driver was not able to read that GPIO. h](j)}(hFailed to read spk-idh]hFailed to read spk-id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj ubj)}(hhh]h)}(h^ACPI says that the driver should request a GPIO but the driver was not able to read that GPIO.h]h^ACPI says that the driver should request a GPIO but the driver was not able to read that GPIO.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj*hhubj)}(hdUnexpected spk-id element count AF01 contains more speaker ID GPIO entries than the driver supports h](j)}(hUnexpected spk-id element counth]hUnexpected spk-id element count}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj ubj)}(hhh]h)}(hCAF01 contains more speaker ID GPIO entries than the driver supportsh]hCAF01 contains more speaker ID GPIO entries than the driver supports}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj*hhubj)}(hjOvertemp error Amplifier overheat protection was triggered and the amplifier shut down to protect itself. h](j)}(hOvertemp errorh]hOvertemp error}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj ubj)}(hhh]h)}(hZAmplifier overheat protection was triggered and the amplifier shut down to protect itself.h]hZAmplifier overheat protection was triggered and the amplifier shut down to protect itself.}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj& ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj*hhubj)}(hAmp short error Amplifier detected a short-circuit on the speaker output pins and shut down for protection. This would normally indicate a damaged speaker. h](j)}(hAmp short errorh]hAmp short error}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjC ubj)}(hhh]h)}(hAmplifier detected a short-circuit on the speaker output pins and shut down for protection. This would normally indicate a damaged speaker.h]hAmplifier detected a short-circuit on the speaker output pins and shut down for protection. This would normally indicate a damaged speaker.}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjU ubah}(h]h ]h"]h$]h&]uh1jhjC ubeh}(h]h ]h"]h$]h&]uh1jhhhMhj*hhubj)}(hHibernate wake failed The driver tried to wake the amplifier from its power-saving state but did not see the expected responses from the amplifier. This can be caused by using firmware that does not match the hardware.h](j)}(hHibernate wake failedh]hHibernate wake failed}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM#hjr ubj)}(hhh]h)}(hThe driver tried to wake the amplifier from its power-saving state but did not see the expected responses from the amplifier. This can be caused by using firmware that does not match the hardware.h]hThe driver tried to wake the amplifier from its power-saving state but did not see the expected responses from the amplifier. This can be caused by using firmware that does not match the hardware.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM"hj ubah}(h]h ]h"]h$]h&]uh1jhjr ubeh}(h]h ]h"]h$]h&]uh1jhhhM#hj*hhubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubeh}(h]error-messagesah ]h"]error messagesah$]h&]uh1hhhhhhhhKubeh}(h]Eaudio-drivers-for-cirrus-logic-cs35l54-56-57-boosted-smart-amplifiersah ]h"]Eaudio drivers for cirrus logic cs35l54/56/57 boosted smart amplifiersah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j jZjWjRjOjDjAjjjj~jjj<j9jjjjjjjjj j u nametypes}(j jZjRjDjjjj<jjjjj uh}(j hjWj+jOjjAj]jj j~jjjj9jjjGjjXjjjjj j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.