From: Sen Wang <sen@ti.com>
To: <broonie@kernel.org>, <kuninori.morimoto.gx@renesas.com>
Cc: <lgirdwood@gmail.com>, <perex@perex.cz>, <tiwai@suse.com>,
<devarsht@ti.com>, <v-singh1@ti.com>,
<linux-sound@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
Sen Wang <sen@ti.com>
Subject: [PATCH] ASoC: simple-card-utils: fix graph_util_is_ports0() for DT overlays
Date: Sat, 7 Mar 2026 22:41:30 -0600 [thread overview]
Message-ID: <20260308044130.1991091-1-sen@ti.com> (raw)
graph_util_is_ports0() identifies DPCM front-end (ports@0) vs back-end
(ports@1) by calling of_get_child_by_name() to find the first "ports"
child and comparing pointers. This relies on child iteration order
matching DTS source order.
But when the DPCM topology comes from a DT overlay, __of_attach_node()
inserts new children at the head of the sibling list, reversing the
order. of_get_child_by_name() then returns ports@N instead of ports@0,
causing all front-end links to be classified as back-ends in
audio-graph-card2. The card subsequently breaks and registers with no
PCM devices.
Therefore fix this by string matching the unit address in the node name,
instead of relying on sibling order.
To mimic the original behavior, the function will match against "ports"
or "ports@0".
Fixes: 92939252458f ("ASoC: simple-card-utils: add asoc_graph_is_ports0()")
Signed-off-by: Sen Wang <sen@ti.com>
---
sound/soc/generic/simple-card-utils.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index bdc02e85b089..8e0efc78b490 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -1038,11 +1038,12 @@ int graph_util_is_ports0(struct device_node *np)
else
port = np;
- struct device_node *ports __free(device_node) = of_get_parent(port);
- struct device_node *top __free(device_node) = of_get_parent(ports);
- struct device_node *ports0 __free(device_node) = of_get_child_by_name(top, "ports");
+ struct device_node *ports __free(device_node) = of_get_parent(port);
- return ports0 == ports;
+ const char *at = strchr(kbasename(ports->full_name), '@');
+
+ /* match "ports" or "ports@0" by unit address in node name */
+ return !at || !strcmp(at, "@0");
}
EXPORT_SYMBOL_GPL(graph_util_is_ports0);
--
2.43.0
next reply other threads:[~2026-03-08 4:42 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-08 4:41 Sen Wang [this message]
2026-03-09 0:40 ` [PATCH] ASoC: simple-card-utils: fix graph_util_is_ports0() for DT overlays Kuninori Morimoto
2026-03-09 4:12 ` Sen Wang
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=20260308044130.1991091-1-sen@ti.com \
--to=sen@ti.com \
--cc=broonie@kernel.org \
--cc=devarsht@ti.com \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
--cc=v-singh1@ti.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