]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: cs35l56: Fix missing calls to wm_adsp2_remove()
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Wed, 10 Jun 2026 09:34:30 +0000 (10:34 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 10 Jun 2026 10:24:44 +0000 (11:24 +0100)
Call wm_adsp2_remove() in cs35l56_remove() and the error path of
cs35l56_common_probe().

Depends on commit 7d3fb78b5503 ("ASoC: wm_adsp: Fix NULL dereference
when removing firmware controls").

The call to wm_halo_init() during driver probe should be paired with
a call to wm_adsp2_remove() but this was missing. The consequence
would be a memory leak of the control lists in the cs_dsp driver.

Fixes: e49611252900 ("ASoC: cs35l56: Add driver for Cirrus Logic CS35L56")
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20260610093432.557375-2-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs35l56.c

index 4fbbdcc87151621e735d684e1a041fee11619513..3ab5395f15bb250abcdb6665d4a5d460c5abe003 100644 (file)
@@ -1964,11 +1964,14 @@ int cs35l56_common_probe(struct cs35l56_private *cs35l56)
                                         cs35l56_dai, ARRAY_SIZE(cs35l56_dai));
        if (ret < 0) {
                dev_err_probe(cs35l56->base.dev, ret, "Register codec failed\n");
-               goto err;
+               goto err_remove_wm_adsp;
        }
 
        return 0;
 
+err_remove_wm_adsp:
+       wm_adsp2_remove(&cs35l56->dsp);
+
 err:
        gpiod_set_value_cansleep(cs35l56->base.reset_gpio, 0);
        regulator_bulk_disable(ARRAY_SIZE(cs35l56->supplies), cs35l56->supplies);
@@ -2076,6 +2079,8 @@ void cs35l56_remove(struct cs35l56_private *cs35l56)
 
        destroy_workqueue(cs35l56->dsp_wq);
 
+       wm_adsp2_remove(&cs35l56->dsp);
+
        pm_runtime_dont_use_autosuspend(cs35l56->base.dev);
        pm_runtime_suspend(cs35l56->base.dev);
        pm_runtime_disable(cs35l56->base.dev);