mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-05 19:49:34 +07:00
ASoC: soc-core: merge snd_soc_add_dai_link() and soc_bind_dai_link()
We don't need to separete snd_soc_add_dai_link() and soc_bind_dai_link() anymore. Let's merge these. One note is that before this patch, it adds list (A) eventhough if it had dai_link->ignore (1), or already bounded dai_link (2). But I guess it is wrong. This patch also solve this issue. /* BEFORE */ int soc_bind_dai_link(...) { ... (1) if (dai_link->ignore) return 0; (2) if (soc_is_dai_link_bound(...)) return 0; ... } int snd_soc_add_dai_link(...) { ... => ret = soc_bind_dai_link(...); => if (ret < 0) => return ret; (A) list_add_tail(&dai_link->list, &card->dai_link_list); ... } /* AFTER */ int snd_soc_add_dai_link(...) { ... (1) if (dai_link->ignore) return 0; (2) if (soc_is_dai_link_bound(...)) return 0; ... (A) list_add_tail(&dai_link->list, &card->dai_link_list); return 0; } Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87r22lhkx8.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
ffdbca0be6
commit
63dc47da1f
@ -1059,14 +1059,33 @@ static void soc_unbind_dai_link(struct snd_soc_card *card,
|
|||||||
soc_free_pcm_runtime(rtd);
|
soc_free_pcm_runtime(rtd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int soc_bind_dai_link(struct snd_soc_card *card,
|
/**
|
||||||
struct snd_soc_dai_link *dai_link)
|
* snd_soc_add_dai_link - Add a DAI link dynamically
|
||||||
|
* @card: The ASoC card to which the DAI link is added
|
||||||
|
* @dai_link: The new DAI link to add
|
||||||
|
*
|
||||||
|
* This function adds a DAI link to the ASoC card's link list.
|
||||||
|
*
|
||||||
|
* Note: Topology can use this API to add DAI links when probing the
|
||||||
|
* topology component. And machine drivers can still define static
|
||||||
|
* DAI links in dai_link array.
|
||||||
|
*/
|
||||||
|
int snd_soc_add_dai_link(struct snd_soc_card *card,
|
||||||
|
struct snd_soc_dai_link *dai_link)
|
||||||
{
|
{
|
||||||
struct snd_soc_pcm_runtime *rtd;
|
struct snd_soc_pcm_runtime *rtd;
|
||||||
struct snd_soc_dai_link_component *codec, *platform;
|
struct snd_soc_dai_link_component *codec, *platform;
|
||||||
struct snd_soc_component *component;
|
struct snd_soc_component *component;
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
|
||||||
|
lockdep_assert_held(&client_mutex);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Notify the machine driver for extra initialization
|
||||||
|
*/
|
||||||
|
if (card->add_dai_link)
|
||||||
|
card->add_dai_link(card, dai_link);
|
||||||
|
|
||||||
if (dai_link->ignore)
|
if (dai_link->ignore)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -1115,12 +1134,16 @@ static int soc_bind_dai_link(struct snd_soc_card *card,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* see for_each_card_links */
|
||||||
|
list_add_tail(&dai_link->list, &card->dai_link_list);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
_err_defer:
|
_err_defer:
|
||||||
soc_free_pcm_runtime(rtd);
|
soc_free_pcm_runtime(rtd);
|
||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(snd_soc_add_dai_link);
|
||||||
|
|
||||||
static void soc_set_of_name_prefix(struct snd_soc_component *component)
|
static void soc_set_of_name_prefix(struct snd_soc_component *component)
|
||||||
{
|
{
|
||||||
@ -1411,41 +1434,6 @@ void snd_soc_disconnect_sync(struct device *dev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(snd_soc_disconnect_sync);
|
EXPORT_SYMBOL_GPL(snd_soc_disconnect_sync);
|
||||||
|
|
||||||
/**
|
|
||||||
* snd_soc_add_dai_link - Add a DAI link dynamically
|
|
||||||
* @card: The ASoC card to which the DAI link is added
|
|
||||||
* @dai_link: The new DAI link to add
|
|
||||||
*
|
|
||||||
* This function adds a DAI link to the ASoC card's link list.
|
|
||||||
*
|
|
||||||
* Note: Topology can use this API to add DAI links when probing the
|
|
||||||
* topology component. And machine drivers can still define static
|
|
||||||
* DAI links in dai_link array.
|
|
||||||
*/
|
|
||||||
int snd_soc_add_dai_link(struct snd_soc_card *card,
|
|
||||||
struct snd_soc_dai_link *dai_link)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
lockdep_assert_held(&client_mutex);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Notify the machine driver for extra initialization
|
|
||||||
*/
|
|
||||||
if (card->add_dai_link)
|
|
||||||
card->add_dai_link(card, dai_link);
|
|
||||||
|
|
||||||
ret = soc_bind_dai_link(card, dai_link);
|
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
/* see for_each_card_links */
|
|
||||||
list_add_tail(&dai_link->list, &card->dai_link_list);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(snd_soc_add_dai_link);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* snd_soc_remove_dai_link - Remove a DAI link from the list
|
* snd_soc_remove_dai_link - Remove a DAI link from the list
|
||||||
* @card: The ASoC card that owns the link
|
* @card: The ASoC card that owns the link
|
||||||
|
Loading…
Reference in New Issue
Block a user