ASoC: soc-core: remove soc_remove_dai_links()
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. soc_cleanup_card_resources() (a) which is paired function of snd_soc_instantiate_card() (A) is calling soc_remove_dai_links() (*) to remove card related resources, but it is breaking add/remove balance (B)(b)(C)(c)(D)(d), in other words these should be called from soc_cleanup_card_resources() (a) from balance point of view. More headacke is that it is using original removing method for dai_link even though we already have snd_soc_remove_dai_link() which is the function for it (d). This patch removes snd_soc_remove_dai_links() and balance up code. static void soc_remove_dai_links(...) { ... (b) soc_remove_link_dais(card); (c) soc_remove_link_components(card); for_each_card_links_safe(card, link, _link) { ... /* it should use snd_soc_remove_dai_link() here */ (d) list_del(&link->list); } } (a) static int soc_cleanup_card_resources(...) { ... /* remove and free each DAI */ (*) soc_remove_dai_links(card); ... } (A) static int snd_soc_instantiate_card(struct snd_soc_card *card) { ... /* add predefined DAI links to the list */ for_each_card_prelinks(card, i, dai_link) (B) snd_soc_add_dai_link(card, dai_link); ... /* probe all components used by DAI links on this card */ (C) ret = soc_probe_link_components(card); ... /* probe all DAI links on this card */ (D) ret = soc_probe_link_dais(card); ... } Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/875zl7bu1r.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
4dc0e7df62
commit
7ce6088f60
|
@ -1275,23 +1275,6 @@ static int soc_probe_link_components(struct snd_soc_card *card)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void soc_remove_dai_links(struct snd_soc_card *card)
|
||||
{
|
||||
struct snd_soc_dai_link *link, *_link;
|
||||
|
||||
soc_remove_link_dais(card);
|
||||
|
||||
soc_remove_link_components(card);
|
||||
|
||||
for_each_card_links_safe(card, link, _link) {
|
||||
if (link->dobj.type == SND_SOC_DOBJ_DAI_LINK)
|
||||
dev_warn(card->dev, "Topology forgot to remove link %s?\n",
|
||||
link->name);
|
||||
|
||||
list_del(&link->list);
|
||||
}
|
||||
}
|
||||
|
||||
static int soc_init_dai_link(struct snd_soc_card *card,
|
||||
struct snd_soc_dai_link *link)
|
||||
{
|
||||
|
@ -1924,6 +1907,8 @@ match:
|
|||
|
||||
static void soc_cleanup_card_resources(struct snd_soc_card *card)
|
||||
{
|
||||
struct snd_soc_dai_link *link, *_link;
|
||||
|
||||
/* free the ALSA card at first; this syncs with pending operations */
|
||||
if (card->snd_card) {
|
||||
snd_card_free(card->snd_card);
|
||||
|
@ -1931,7 +1916,12 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card)
|
|||
}
|
||||
|
||||
/* remove and free each DAI */
|
||||
soc_remove_dai_links(card);
|
||||
soc_remove_link_dais(card);
|
||||
soc_remove_link_components(card);
|
||||
|
||||
for_each_card_links_safe(card, link, _link)
|
||||
snd_soc_remove_dai_link(card, link);
|
||||
|
||||
soc_remove_pcm_runtimes(card);
|
||||
|
||||
/* remove auxiliary devices */
|
||||
|
|
Loading…
Reference in New Issue