ASoC: dapm: Setup private_free callback for dapm kcontrols
authorLars-Peter Clausen <lars@metafoo.de>
Fri, 14 Jun 2013 11:16:51 +0000 (13:16 +0200)
committerMark Brown <broonie@linaro.org>
Fri, 14 Jun 2013 11:34:10 +0000 (12:34 +0100)
The private data containing the widget list that is a assigned to a DAPM
kcontrol is never freed. Setup the private_free for DAPM kcontrols to take care
of this.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/soc-dapm.c

index a80c883bb8be29eeba512d86e46af833d472c833..9dd2d1d63981a2fe2b1029ffc1d9c5ea34fede06 100644 (file)
@@ -504,6 +504,11 @@ static int dapm_is_shared_kcontrol(struct snd_soc_dapm_context *dapm,
        return 0;
 }
 
+static void dapm_kcontrol_free(struct snd_kcontrol *kctl)
+{
+       kfree(kctl->private_data);
+}
+
 /*
  * Determine if a kcontrol is shared. If it is, look it up. If it isn't,
  * create it. Either way, add the widget into the control's widget list
@@ -617,6 +622,7 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
 
                kcontrol = snd_soc_cnew(&w->kcontrol_news[kci], wlist, name,
                                        prefix);
+               kcontrol->private_free = dapm_kcontrol_free;
                ret = snd_ctl_add(card, kcontrol);
                if (ret < 0) {
                        dev_err(dapm->dev,