From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
To: Mark Brown <broonie@kernel.org>
Cc: Linux-ALSA <alsa-devel@alsa-project.org>,
Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Subject: [alsa-devel] [PATCH 06/21] ASoC: soc-core: call soc_bind_dai_link() under snd_soc_add_dai_link()
Date: 09 Oct 2019 13:30:14 +0900 [thread overview]
Message-ID: <87k19eilrd.wl-kuninori.morimoto.gx@renesas.com> (raw)
In-Reply-To: <87sgo2ilso.wl-kuninori.morimoto.gx@renesas.com>
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
If we focus to soc_bind_dai_link() at snd_soc_instantiate_card(),
we will notice very complex operation.
static int snd_soc_instantiate_card(...)
{
...
/*
* (1) find component via card pre-linked dai_link
*
* find component (CPU/Codec/Platform) via card pre-linked
* dai_link, and connect found component to *rtd*.
* for_each_card_prelinks() is dai_link loop for card pre-linked
*/
for_each_card_prelinks(card, i, dai_link) {
ret = soc_bind_dai_link(card, dai_link);
...
}
...
/*
* (2) connect card pre-linked dai_link to card list
*
* connect all card pre-linked dai_link to *card list*.
*/
for_each_card_prelinks(card, i, dai_link) {
ret = snd_soc_add_dai_link(card, dai_link);
...
}
...
/*
* (3) probe binded component
*
* probe *rtd* connected component. This means, connected
* component at (1) is the probe target.
*
* At this component probe, topology may add new dai_link to
* *card list* by using snd_soc_add_dai_link() which is
* used at (2).
*/
ret = soc_probe_link_components(card);
...
/*
* (4) find component again
*
* find component again. card pre-linked dai_link listed components
* are already found at (1), but topology added one via (3) is not
* yet found. Here try to find component for it.
*
* for_each_card_links() here means *card list* loop,
* which is connected via (2) and (3).
* It ignores already added one, this means it ignores component
* which is connected at (1).
* Thus, find target here is new added one at (3).
*/
for_each_card_links(card, dai_link) {
ret = soc_bind_dai_link(card, dai_link);
...
}
...
}
It is doing very complex method.
The problem is finding component for "card pre-linked" (= (1)) and
"topology added dai_link" (= (3)) are separated.
If we can "find component" when dai_link is connected to "card list",
the code will be very simple. This patch fixup it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/soc-core.c | 23 ++++++-----------------
1 file changed, 6 insertions(+), 17 deletions(-)
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 4edac93..a0c80f7 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1409,6 +1409,8 @@ EXPORT_SYMBOL_GPL(snd_soc_disconnect_sync);
int snd_soc_add_dai_link(struct snd_soc_card *card,
struct snd_soc_dai_link *dai_link)
{
+ int ret;
+
if (dai_link->dobj.type
&& dai_link->dobj.type != SND_SOC_DOBJ_DAI_LINK) {
dev_err(card->dev, "Invalid dai link type %d\n",
@@ -1424,6 +1426,10 @@ int snd_soc_add_dai_link(struct snd_soc_card *card,
if (dai_link->dobj.type && 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);
@@ -1996,13 +2002,6 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
/* check whether any platform is ignore machine FE and using topology */
soc_check_tplg_fes(card);
- /* bind DAIs */
- for_each_card_prelinks(card, i, dai_link) {
- ret = soc_bind_dai_link(card, dai_link);
- if (ret != 0)
- goto probe_end;
- }
-
/* bind aux_devs too */
ret = soc_bind_aux_dev(card);
if (ret < 0)
@@ -2060,16 +2059,6 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
if (ret < 0)
goto probe_end;
- /*
- * Find new DAI links added during probing components and bind them.
- * Components with topology may bring new DAIs and DAI links.
- */
- for_each_card_links(card, dai_link) {
- ret = soc_bind_dai_link(card, dai_link);
- if (ret)
- goto probe_end;
- }
-
/* probe all DAI links on this card */
ret = soc_probe_link_dais(card);
if (ret < 0) {
--
2.7.4
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2019-10-09 4:34 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-09 4:29 [alsa-devel] [PATCH 00/21] ASoC: soc-core cleanup - step 4 Kuninori Morimoto
2019-10-09 4:29 ` [alsa-devel] [PATCH 01/21] ASoC: soc-core: remove for_each_rtdcom_safe() Kuninori Morimoto
2019-10-09 4:29 ` [alsa-devel] [PATCH 02/21] ASoC: soc-core: add for_each_rtd_components() and replace Kuninori Morimoto
2019-10-09 4:30 ` [alsa-devel] [PATCH 03/21] ASoC: soc-core: move soc_init_dai_link() Kuninori Morimoto
2019-10-09 4:30 ` [alsa-devel] [PATCH 04/21] ASoC: soc-core: rename soc_init_dai_link() to soc_dai_link_sanity_check() Kuninori Morimoto
2019-10-10 14:17 ` Pierre-Louis Bossart
2019-10-11 1:19 ` Kuninori Morimoto
2019-10-11 13:38 ` Pierre-Louis Bossart
2019-10-09 4:30 ` [alsa-devel] [PATCH 05/21] ASoC: soc-core: remove duplicated soc_is_dai_link_bound() Kuninori Morimoto
2019-10-10 15:09 ` Pierre-Louis Bossart
2019-10-09 4:30 ` Kuninori Morimoto [this message]
2019-10-09 4:30 ` [alsa-devel] [PATCH 07/21] ASoC: soc-core: add soc_unbind_dai_link() Kuninori Morimoto
2019-10-09 4:30 ` [alsa-devel] [PATCH 08/21] ASoC: soc-core: snd_soc_unbind_card() cleanup Kuninori Morimoto
2019-10-09 4:30 ` [alsa-devel] [PATCH 09/21] ASoC: soc-core: remove unneeded snd_soc_tplg_component_remove() Kuninori Morimoto
2019-10-10 15:09 ` Pierre-Louis Bossart
2019-10-11 1:30 ` Kuninori Morimoto
2019-10-11 13:40 ` Pierre-Louis Bossart
2019-10-09 4:30 ` [alsa-devel] [PATCH 10/21] ASoC: soc-core: move snd_soc_lookup_component() Kuninori Morimoto
2019-10-09 4:30 ` [alsa-devel] [PATCH 11/21] ASoC: soc-core: add snd_soc_del_component() Kuninori Morimoto
2019-10-10 15:16 ` Pierre-Louis Bossart
2019-10-11 1:35 ` Kuninori Morimoto
2019-10-09 4:30 ` [alsa-devel] [PATCH 12/21] ASoC: soc-core: use snd_soc_lookup_component() at snd_soc_unregister_component() Kuninori Morimoto
2019-10-10 15:19 ` Pierre-Louis Bossart
2019-10-11 1:38 ` Kuninori Morimoto
2019-10-09 4:30 ` [alsa-devel] [PATCH 13/21] ASoC: soc-core: move snd_soc_register_dai() Kuninori Morimoto
2019-10-09 4:30 ` [alsa-devel] [PATCH 14/21] ASoC: soc-core: have legacy_dai_naming at snd_soc_register_dai() Kuninori Morimoto
2019-10-10 15:26 ` Pierre-Louis Bossart
2019-10-11 1:07 ` Kuninori Morimoto
2019-10-11 13:43 ` Pierre-Louis Bossart
2019-10-09 4:30 ` [alsa-devel] [PATCH 15/21] ASoC: soc-core: move snd_soc_unregister_dais() Kuninori Morimoto
2019-10-09 4:31 ` [alsa-devel] [PATCH 16/21] ASoC: soc-core: add snd_soc_unregister_dai() Kuninori Morimoto
2019-10-09 4:31 ` [alsa-devel] [PATCH 17/21] ASoC: soc-core: don't call snd_soc_dapm_new_dai_widgets() at snd_soc_register_dai() Kuninori Morimoto
2019-10-09 4:31 ` [alsa-devel] [PATCH 18/21] ASoC: soc-core: use mutex_lock() at snd_soc_add_component() Kuninori Morimoto
2019-10-10 15:29 ` Pierre-Louis Bossart
2019-10-09 4:31 ` [alsa-devel] [PATCH 19/21] ASoC: soc-core: call snd_soc_register_dai() from snd_soc_register_dais() Kuninori Morimoto
2019-10-10 15:34 ` Pierre-Louis Bossart
2019-10-11 1:44 ` Kuninori Morimoto
2019-10-09 4:31 ` [alsa-devel] [PATCH 20/21] ASoC: soc-core: remove topology specific operation Kuninori Morimoto
2019-10-09 4:31 ` [alsa-devel] [PATCH 21/21] ASoC: soc.h: dobj is used only when SND_SOC_TOPOLOGY Kuninori Morimoto
2019-10-09 14:16 ` [alsa-devel] [PATCH 00/21] ASoC: soc-core cleanup - step 4 Pierre-Louis Bossart
2019-10-10 15:38 ` Pierre-Louis Bossart
2019-10-11 1:53 ` Kuninori Morimoto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87k19eilrd.wl-kuninori.morimoto.gx@renesas.com \
--to=kuninori.morimoto.gx@renesas.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=pierre-louis.bossart@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).