diff options
| author | Mark Brown <broonie@kernel.org> | 2026-05-06 15:22:53 +0300 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2026-05-06 15:22:53 +0300 |
| commit | 5776bcdf4dccac8edc1160482792b512da5c08b4 (patch) | |
| tree | 68e1174a85d2abb0775aec4a025d813ebf37005b | |
| parent | 027ef9a9297c6ae8be11681e0fa485c1829d0572 (diff) | |
| parent | fd4d83e1437d6395021b21531e187c8a67ac21b0 (diff) | |
| download | linux-5776bcdf4dccac8edc1160482792b512da5c08b4.tar.xz | |
ASoC: cs35l56: Fixes for driver cleanup
Richard Fitzgerald <rf@opensource.cirrus.com> says:
Two patches to fix cleanup during driver remove() and the error path
of probe().
The main purpose is to fix cleanup of the workqueue.
| -rw-r--r-- | sound/soc/codecs/cs35l56.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c index 378017fcea10..849d70ca23d6 100644 --- a/sound/soc/codecs/cs35l56.c +++ b/sound/soc/codecs/cs35l56.c @@ -1956,9 +1956,9 @@ int cs35l56_common_probe(struct cs35l56_private *cs35l56) goto err; } - ret = devm_snd_soc_register_component(cs35l56->base.dev, - &soc_component_dev_cs35l56, - cs35l56_dai, ARRAY_SIZE(cs35l56_dai)); + ret = snd_soc_register_component(cs35l56->base.dev, + &soc_component_dev_cs35l56, + cs35l56_dai, ARRAY_SIZE(cs35l56_dai)); if (ret < 0) { dev_err_probe(cs35l56->base.dev, ret, "Register codec failed\n"); goto err; @@ -1970,6 +1970,9 @@ err: gpiod_set_value_cansleep(cs35l56->base.reset_gpio, 0); regulator_bulk_disable(ARRAY_SIZE(cs35l56->supplies), cs35l56->supplies); + if (cs35l56->dsp_wq) + destroy_workqueue(cs35l56->dsp_wq); + return ret; } EXPORT_SYMBOL_NS_GPL(cs35l56_common_probe, "SND_SOC_CS35L56_CORE"); @@ -2057,6 +2060,8 @@ EXPORT_SYMBOL_NS_GPL(cs35l56_init, "SND_SOC_CS35L56_CORE"); void cs35l56_remove(struct cs35l56_private *cs35l56) { + snd_soc_unregister_component(cs35l56->base.dev); + cs35l56->base.init_done = false; /* |
