Re: [PATCH] ASoC: cs35l41: Restore register state after system sleep
From: Rhodes, David
Date: Wed Jun 17 2026 - 13:41:56 EST
On 6/16/26 11:31 AM, Stefan Binding wrote:
Hi,
I have some concerns about this patch.
This driver is used for more than just the Steam Deck, so we would need to ensure that this patch doesn't break those systems.
There are some potential complexities around cs35l41 with respect to Boost and DSP enablement that need careful thought when supporting system sleep.
The HDA equivalent driver for cs35l41 does have support for system sleep, but this driver works very differently.
I recommend reaching out to David Rhodes <david.rhodes@xxxxxxxxxx> for more information on the ASoC driver for CS35L41.
Please also cc patches@xxxxxxxxxxxxxxxxxxxxx.
Thanks,
Stefan
On 15/06/2026 15:54, Nícolas F. R. A. Prado wrote:
Currently, on the Steam Deck LCD when the system goes into hibernation
and resumes back, the speakers are silent when playing with:
aplay -D plughw:acp5x,1 /usr/share/sounds/alsa/Front_Left.wav
A crude workaround was to, after resuming the system, bypassing the
regmap cache on the cs35l41 devices, before playing:
echo 1 > /sys/kernel/debug/regmap/spi-VLV1776\:00/cache_bypass
echo 1 > /sys/kernel/debug/regmap/spi-VLV1776\:01/cache_bypass
That indicated that the hardware registers had gone out of sync with
the regmap cache due to the power down in system hibernation.
Fix the issue by, before system sleep, marking the regcache as cache
only, and after system sleep, resetting the hardware and restoring the
hardware registers from the regcache.
This gets the sound working on the Steam Deck LCD after resume from S4.
While the issue was only observed on S4 on this platform, the callbacks
for suspend/resume are also set in the same way to account for platforms
that might power down the chip on S3 as well.
Note that this change does not take care of restoring the DSP state,
since the affected platform does not use the DSP and it couldn't be
tested, so it is only shut down on resume so it can be reinitialized in
a future DSP preload event.
Assisted-by: Copilot:claude-sonnet-4.6
Signed-off-by: Nícolas F. R. A. Prado <nfraprado@xxxxxxxxxxxxx>
Hi Nicholas,
I share Stefan's concerns about this patch affecting other devices. I also wonder if there is a less crude workaround for your system's behavior.
The existing driver uses runtime_suspend/runtime_resume to enter and exit a low power 'hibernation' mode (wm_adsp_hibernate/cs35l41_enter_hibernate). In this mode the part will lose some configuration so the regmap is put into cache_only for the duration of the sleep and synced when waking up.
Are you sure the device is not just missing a runtime_resume after the system is in S4? This whole sequence of sys operations should only be needed if the amp is completely losing power.
Thanks,
David