All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] ASoC: wm_adsp: free memory when unloaded or closed
@ 2016-04-27 13:58 ` Richard Fitzgerald
  0 siblings, 0 replies; 12+ messages in thread
From: Richard Fitzgerald @ 2016-04-27 13:58 UTC (permalink / raw)
  To: broonie; +Cc: patches, alsa-devel, linux-kernel

The patch adds a wm_adsp2_remove() function to ensure that memory
is freed when the driver is unloaded or shut down.

Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
---
 sound/soc/codecs/wm_adsp.c | 20 ++++++++++++++++++++
 sound/soc/codecs/wm_adsp.h |  1 +
 2 files changed, 21 insertions(+)

diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index b6470de..c350a52 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -1039,6 +1039,13 @@ static void wm_adsp_ctl_work(struct work_struct *work)
 	kfree(ctl_work);
 }
 
+static void wm_adsp_free_ctl_blk(struct wm_coeff_ctl *ctl)
+{
+	kfree(ctl->cache);
+	kfree(ctl->name);
+	kfree(ctl);
+}
+
 static int wm_adsp_create_control(struct wm_adsp *dsp,
 				  const struct wm_adsp_alg_region *alg_region,
 				  unsigned int offset, unsigned int len,
@@ -2434,6 +2441,19 @@ int wm_adsp2_init(struct wm_adsp *dsp)
 }
 EXPORT_SYMBOL_GPL(wm_adsp2_init);
 
+void wm_adsp2_remove(struct wm_adsp *dsp)
+{
+	struct wm_coeff_ctl *ctl;
+
+	while (!list_empty(&dsp->ctl_list)) {
+		ctl = list_first_entry(&dsp->ctl_list, struct wm_coeff_ctl,
+					list);
+		list_del(&ctl->list);
+		wm_adsp_free_ctl_blk(ctl);
+	}
+}
+EXPORT_SYMBOL_GPL(wm_adsp2_remove);
+
 int wm_adsp_compr_open(struct wm_adsp *dsp, struct snd_compr_stream *stream)
 {
 	struct wm_adsp_compr *compr;
diff --git a/sound/soc/codecs/wm_adsp.h b/sound/soc/codecs/wm_adsp.h
index b61cb57..feb61e2 100644
--- a/sound/soc/codecs/wm_adsp.h
+++ b/sound/soc/codecs/wm_adsp.h
@@ -92,6 +92,7 @@ extern const struct snd_kcontrol_new wm_adsp_fw_controls[];
 
 int wm_adsp1_init(struct wm_adsp *dsp);
 int wm_adsp2_init(struct wm_adsp *dsp);
+void wm_adsp2_remove(struct wm_adsp *dsp);
 int wm_adsp2_codec_probe(struct wm_adsp *dsp, struct snd_soc_codec *codec);
 int wm_adsp2_codec_remove(struct wm_adsp *dsp, struct snd_soc_codec *codec);
 int wm_adsp1_event(struct snd_soc_dapm_widget *w,
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2016-04-27 16:38 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-27 13:58 [PATCH 1/3] ASoC: wm_adsp: free memory when unloaded or closed Richard Fitzgerald
2016-04-27 13:58 ` Richard Fitzgerald
2016-04-27 13:58 ` [PATCH 2/3] ASoC: arizona: call wm_adsp2_remove when codec driver is removed Richard Fitzgerald
2016-04-27 13:58   ` Richard Fitzgerald
2016-04-27 16:34   ` Applied "ASoC: arizona: call wm_adsp2_remove when codec driver is removed" to the asoc tree Mark Brown
2016-04-27 16:34     ` Mark Brown
2016-04-27 13:58 ` [PATCH 3/3] ASoC: wm_adsp: factor out freeing of alg regions Richard Fitzgerald
2016-04-27 13:58   ` Richard Fitzgerald
2016-04-27 16:34   ` Applied "ASoC: wm_adsp: factor out freeing of alg regions" to the asoc tree Mark Brown
2016-04-27 16:34     ` Mark Brown
2016-04-27 16:35 ` Applied "ASoC: wm_adsp: free memory when unloaded or closed" " Mark Brown
2016-04-27 16:35   ` Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.