Commit 63dc47da authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

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: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87r22lhkx8.wl-kuninori.morimoto.gx@renesas.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent ffdbca0b
...@@ -1059,7 +1059,18 @@ static void soc_unbind_dai_link(struct snd_soc_card *card, ...@@ -1059,7 +1059,18 @@ 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, /**
* 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_dai_link *dai_link)
{ {
struct snd_soc_pcm_runtime *rtd; struct snd_soc_pcm_runtime *rtd;
...@@ -1067,6 +1078,14 @@ static int soc_bind_dai_link(struct snd_soc_card *card, ...@@ -1067,6 +1078,14 @@ static int soc_bind_dai_link(struct snd_soc_card *card,
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, ...@@ -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) ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment