Skip to content

Commit

Permalink
ASoC: soc-core: add soc_unbind_dai_link()
Browse files Browse the repository at this point in the history
It is easy to read code if it is cleanly using paired function/naming,
like start <-> stop, register <-> unregister, etc, etc.
But, current ALSA SoC code is very random, unbalance, not paired, etc.
It is easy to create bug at the such code, and it will be difficult to
debug.

ALSA SoC has soc_bind_dai_link(), but its paired soc_unbind_dai_link()
is not implemented.
More confusable is that soc_remove_pcm_runtimes() which should be
soc_unbind_dai_link() is implemented without synchronised
to soc_bind_dai_link().

This patch cleanup this unbalance.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/877e4e3jni.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Kuninori Morimoto authored and Mark Brown committed Nov 5, 2019
1 parent 6b1dff0 commit bc7a909
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions sound/soc/soc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,14 +470,6 @@ static struct snd_soc_pcm_runtime *soc_new_pcm_runtime(
return NULL;
}

static void soc_remove_pcm_runtimes(struct snd_soc_card *card)
{
struct snd_soc_pcm_runtime *rtd, *_rtd;

for_each_card_rtds_safe(card, rtd, _rtd)
soc_free_pcm_runtime(rtd);
}

struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card,
const char *dai_link)
{
Expand Down Expand Up @@ -1037,6 +1029,16 @@ static int soc_dai_link_sanity_check(struct snd_soc_card *card,
return 0;
}

static void soc_unbind_dai_link(struct snd_soc_card *card,
struct snd_soc_dai_link *dai_link)
{
struct snd_soc_pcm_runtime *rtd;

rtd = snd_soc_get_pcm_runtime(card, dai_link->name);
if (rtd)
soc_free_pcm_runtime(rtd);
}

static int soc_bind_dai_link(struct snd_soc_card *card,
struct snd_soc_dai_link *dai_link)
{
Expand Down Expand Up @@ -1466,6 +1468,8 @@ void snd_soc_remove_dai_link(struct snd_soc_card *card,
card->remove_dai_link(card, dai_link);

list_del(&dai_link->list);

soc_unbind_dai_link(card, dai_link);
}
EXPORT_SYMBOL_GPL(snd_soc_remove_dai_link);

Expand Down Expand Up @@ -1974,8 +1978,6 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card)
for_each_card_links_safe(card, link, _link)
snd_soc_remove_dai_link(card, link);

soc_remove_pcm_runtimes(card);

/* remove auxiliary devices */
soc_remove_aux_devices(card);
soc_unbind_aux_dev(card);
Expand Down

0 comments on commit bc7a909

Please sign in to comment.