[PATCH v2 2/4] ASoC: codecs: wm_adsp: Allow wm_adsp to hibernate without stopping DSP
From: Stefan Binding
Date: Tue Feb 24 2026 - 11:20:06 EST
Some parts do not stop the DSP core before runtime suspend, however,
this leaves the DSP controls enabled and accessible whilst the part is
suspended and the regmap is cache_only.
Add new APIs to allow for the DSP to hibernate when the part is
suspended, and the DSP is not shut down.
Signed-off-by: Stefan Binding <sbinding@xxxxxxxxxxxxxxxxxxxxx>
---
sound/soc/codecs/wm_adsp.c | 6 ++++++
sound/soc/codecs/wm_adsp.h | 1 +
2 files changed, 7 insertions(+)
diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index 2e23848e1dce..d95b54275b5e 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -1100,6 +1100,12 @@ void wm_adsp_stop(struct wm_adsp *dsp)
}
EXPORT_SYMBOL_GPL(wm_adsp_stop);
+void wm_adsp_hibernate(struct wm_adsp *dsp, bool hibernate)
+{
+ cs_dsp_hibernate(&dsp->cs_dsp, hibernate);
+}
+EXPORT_SYMBOL_GPL(wm_adsp_hibernate);
+
int wm_adsp_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event)
{
diff --git a/sound/soc/codecs/wm_adsp.h b/sound/soc/codecs/wm_adsp.h
index 8035fda71f8d..a9118be793d7 100644
--- a/sound/soc/codecs/wm_adsp.h
+++ b/sound/soc/codecs/wm_adsp.h
@@ -103,6 +103,7 @@ irqreturn_t wm_halo_wdt_expire(int irq, void *data);
int wm_adsp_run(struct wm_adsp *dsp);
void wm_adsp_stop(struct wm_adsp *dsp);
+void wm_adsp_hibernate(struct wm_adsp *dsp, bool hibernate);
int wm_adsp_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event);
--
2.43.0