From: Stephen Warren Date: Fri, 8 Jun 2012 18:34:21 +0000 (-0600) Subject: ASoC: when removing a CPU DAI, clean up its DAPM context X-Git-Tag: v3.6-rc1~117^2~4^2~77 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=18d756440e8ed292b772682c4440a9d33643225b;p=linux.git ASoC: when removing a CPU DAI, clean up its DAPM context When a standalone CPU DAI (one not part of a CODEC) is probed, widgets are created for it. Add a call to snd_soc_dapm_free() in order to clean these up when the CPU DAI is removed. In order for snd_soc_dapm_free() to work, the CPU DAI's DAPM context's list member must be initialized, since snd_soc_dapm_free() removes that from the list it's part of. Add it to the card's list of DAPM contexts. Signed-off-by: Stephen Warren Signed-off-by: Mark Brown --- diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 448d4a7c09dd..621c5bdea483 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -984,8 +984,10 @@ static void soc_remove_dai_link(struct snd_soc_card *card, int num, int order) cpu_dai->probed = 0; list_del(&cpu_dai->card_list); - if (!cpu_dai->codec) + if (!cpu_dai->codec) { + snd_soc_dapm_free(&cpu_dai->dapm); module_put(cpu_dai->dev->driver->owner); + } } } @@ -1264,6 +1266,7 @@ static int soc_probe_dai_link(struct snd_soc_card *card, int num, int order) if (!try_module_get(cpu_dai->dev->driver->owner)) return -ENODEV; + list_add(&cpu_dai->dapm.list, &card->dapm_list); snd_soc_dapm_new_dai_widgets(&cpu_dai->dapm, cpu_dai); }