Wsphinx.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)}(hHAudio drivers for Cirrus Logic CS35L54/56/57/63 Boosted Smart Amplifiersh]hHAudio drivers for Cirrus Logic CS35L54/56/57/63 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/63 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/63 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/63 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/63 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)}(hCS35L57h]h)}(hjh]hCS35L57}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hCS35L63 h]h)}(hCS35L63h]hCS35L63}(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}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj*ubh1: sound/soc/codecs/cs35l56.c and associated files}(hj*hhhNhNubeh}(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}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjHubh: sound/pci/hda/cs35l56_hda.c}(hjHhhhNhNubeh}(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}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthhhhhK.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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjthhubh)}(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: }(hjhhhNhNubj)}(h5https://gitlab.com/kernel-firmware/linux-firmware.gith]h5https://gitlab.com/kernel-firmware/linux-firmware.git}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhK4hjthhubh)}(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&]uh1hhhhK7hjthhubj)}(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&]uh1hhhhK:hjubah}(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&]uh1hhhhKOn 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&]uh1j.hjubh0 to enable receiving the audio from the CS42L43.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK>hjthhubh)}(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&]uh1j.hjubh] to enable HDA bridge mode. There will not be any audio from the amplifiers without firmware.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKDhjthhubh)}(hhh](h)}(hCirrus Logic firmware filesh]hCirrus Logic firmware files}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hhhhhKHubh)}(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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhj7hhubh)}(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 }(hjVhhhNhNubjO)}(h'**not interchangeable between laptops**h]h#not interchangeable between laptops}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jNhjVubh.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKMhj7hhubh)}(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.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhj7hhubh)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jNhjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKXhj7hhubh)}(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&]uh1hhhhKbhjhhubh 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&]hhuh1jhhhKdhjhhubh)}(h%In this example the SSID is 10280c63.h]h%In this example the SSID is 10280c63.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhjhhubh)}(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&]uh1hhhhKjhjhhubhdefinition_list)}(hhh](hdefinition_list_item)}(hKSoundWire (except CS35L56 Rev B0): cs35lxx-b0-dsp1-misc-SSID[-spkidX]-l?u? h](hterm)}(h"SoundWire (except CS35L56 Rev B0):h]h"SoundWire (except CS35L56 Rev B0):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKmhjubh definition)}(hhh]h)}(h'cs35lxx-b0-dsp1-misc-SSID[-spkidX]-l?u?h]h'cs35lxx-b0-dsp1-misc-SSID[-spkidX]-l?u?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKmhjubj)}(hBSoundWire CS35L56 Rev B0: cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampN h](j)}(hSoundWire CS35L56 Rev B0:h]hSoundWire CS35L56 Rev B0:}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKphj3ubj)}(hhh]h)}(h'cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampNh]h'cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampN}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphjEubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhhhKphjhhubj)}(hENon-SoundWire (HDA and I2S): cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampN h](j)}(hNon-SoundWire (HDA and I2S):h]hNon-SoundWire (HDA and I2S):}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKshjbubj)}(hhh]h)}(h'cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampNh]h'cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampN}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshjtubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhhhKshjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(hWhere:h]hWhere:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjhhubh block_quote)}(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. * l?u? is the physical address on the SoundWire bus of the amp this file applies to. * 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&]uh1hhhhKwhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h+SSID is the 8-digit hexadecimal SSID value.h]h)}(hjh]h+SSID is the 8-digit hexadecimal SSID value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hRl?u? is the physical address on the SoundWire bus of the amp this file applies to.h]h)}(hRl?u? is the physical address on the SoundWire bus of the amp this file applies to.h]hRl?u? is the physical address on the SoundWire bus of the amp this file applies to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhjubah}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hjubah}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhhhKwhjubah}(h]h ]h"]h$]h&]uh1jhhhKwhjhhubh)}(hThe CS35L56 Rev B0 continues to use the old filename scheme because a large number of firmware files have already been published with these names.h]hThe CS35L56 Rev B0 continues to use the old filename scheme because a large number of firmware files have already been published with these names.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]/how-do-i-know-which-firmware-file-i-should-haveah ]h"]0how do i know which firmware file i should have?ah$]h&]uh1hhj7hhhhhK]ubeh}(h]cirrus-logic-firmware-filesah ]h"]cirrus logic firmware filesah$]h&]uh1hhjthhhhhKHubh)}(hhh](h)}(h+Sound Open Firmware and ALSA topology filesh]h+Sound Open Firmware and ALSA topology files}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhhhhhKubh)}(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).}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjOhhubh)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjOhhubh)}(hWSOF binary builds are available from: https://github.com/thesofproject/sof-bin/releasesh](h&SOF binary builds are available from: }(hj|hhhNhNubj)}(h1https://github.com/thesofproject/sof-bin/releasesh]h1https://github.com/thesofproject/sof-bin/releases}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhj|ubeh}(h]h ]h"]h$]h&]uh1hhhhKhjOhhubh)}(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&]uh1hhhhKhjOhhubeh}(h]+sound-open-firmware-and-alsa-topology-filesah ]h"]+sound open firmware and alsa topology filesah$]h&]uh1hhjthhhhhKubh)}(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.}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]alsa-ucm-configurationsah ]h"]alsa-ucm configurationsah$]h&]uh1hhjthhhhhKubeh}(h]firmwareah ]h"]firmwareah$]h&]uh1hhhhhhhhK.ubh)}(hhh](h)}(hKernel log messagesh]hKernel log messages}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hhh](h)}(h SoundWireh]h SoundWire}(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):}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(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}hj:sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubeh}(h] soundwireah ]h"] soundwireah$]h&]uh1hhj hhhhhKubh)}(hhh](h)}(hHDAh]hHDA}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhhhKubh)}(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):}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjPhhubj)}(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}hjosbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjPhhubh)}(hhh](h)}(hImportant messagesh]hImportant messages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hhhhhKubj)}(hhh](j)}(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](j)}(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&]uh1jhhhKhjubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjJubj)}(hhh]h)}(h9Shows that a .bin firmware file was found and downloaded.h]h9Shows that a .bin firmware file was found and downloaded.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\ubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hRCalibration applied Factory calibration data in EFI was written to the amplifier. h](j)}(hCalibration appliedh]hCalibration applied}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjyubj)}(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&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]h ]h"]h$]h&]uh1jhj}hhhhhNubeh}(h]important-messagesah ]h"]important messagesah$]h&]uh1hhjPhhhhhKubeh}(h]hdaah ]h"]hdaah$]h&]uh1hhj hhhhhKubeh}(h]kernel-log-messagesah ]h"]kernel log messagesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hError messagesh]hError messages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(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&]uh1hhhhKhjhhubj)}(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