Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18d75644 authored by Stephen Warren's avatar Stephen Warren Committed by Mark Brown
Browse files

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: default avatarStephen Warren <swarren@nvidia.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent a9db7dbe
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -984,10 +984,12 @@ 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);
		}
	}
}

static void soc_remove_dai_links(struct snd_soc_card *card)
{
@@ -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);
		}