From: Herve Codina <herve.codina@bootlin.com>
To: Herve Codina <herve.codina@bootlin.com>,
Liam Girdwood <lgirdwood@gmail.com>,
Mark Brown <broonie@kernel.org>, Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
Jonathan Cameron <jic23@kernel.org>,
Lars-Peter Clausen <lars@metafoo.de>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>,
Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: alsa-devel@alsa-project.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org,
Wojciech Ziemba <wojciech.ziemba@intel.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: [PATCH v6 13/13] ASoC: simple-card: Handle additional devices
Date: Fri, 23 Jun 2023 10:58:30 +0200 [thread overview]
Message-ID: <20230623085830.749991-14-herve.codina@bootlin.com> (raw)
In-Reply-To: <20230623085830.749991-1-herve.codina@bootlin.com>
An additional-devs subnode can be present in the simple-card top node.
This subnode is used to declared some "virtual" additional devices.
Create related devices from this subnode and avoid this subnode presence
to interfere with the already supported subnodes analysis.
Signed-off-by: Herve Codina <herve.codina@bootlin.com>
---
sound/soc/generic/simple-card.c | 46 +++++++++++++++++++++++++++++++--
1 file changed, 44 insertions(+), 2 deletions(-)
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 6f044cc8357e..ae4a47018278 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -348,6 +348,7 @@ static int __simple_for_each_link(struct asoc_simple_priv *priv,
struct device *dev = simple_priv_to_dev(priv);
struct device_node *top = dev->of_node;
struct device_node *node;
+ struct device_node *add_devs;
uintptr_t dpcm_selectable = (uintptr_t)of_device_get_match_data(dev);
bool is_top = 0;
int ret = 0;
@@ -359,6 +360,8 @@ static int __simple_for_each_link(struct asoc_simple_priv *priv,
is_top = 1;
}
+ add_devs = of_get_child_by_name(top, PREFIX "additional-devs");
+
/* loop for all dai-link */
do {
struct asoc_simple_data adata;
@@ -367,6 +370,12 @@ static int __simple_for_each_link(struct asoc_simple_priv *priv,
struct device_node *np;
int num = of_get_child_count(node);
+ /* Skip additional-devs node */
+ if (node == add_devs) {
+ node = of_get_next_child(top, node);
+ continue;
+ }
+
/* get codec */
codec = of_get_child_by_name(node, is_top ?
PREFIX "codec" : "codec");
@@ -380,12 +389,15 @@ static int __simple_for_each_link(struct asoc_simple_priv *priv,
/* get convert-xxx property */
memset(&adata, 0, sizeof(adata));
- for_each_child_of_node(node, np)
+ for_each_child_of_node(node, np) {
+ if (np == add_devs)
+ continue;
simple_parse_convert(dev, np, &adata);
+ }
/* loop for all CPU/Codec node */
for_each_child_of_node(node, np) {
- if (plat == np)
+ if (plat == np || add_devs == np)
continue;
/*
* It is DPCM
@@ -427,6 +439,7 @@ static int __simple_for_each_link(struct asoc_simple_priv *priv,
} while (!is_top && node);
error:
+ of_node_put(add_devs);
of_node_put(node);
return ret;
}
@@ -464,6 +477,31 @@ static int simple_for_each_link(struct asoc_simple_priv *priv,
return ret;
}
+static void simple_depopulate_aux(void *data)
+{
+ struct asoc_simple_priv *priv = data;
+
+ of_platform_depopulate(simple_priv_to_dev(priv));
+}
+
+static int simple_populate_aux(struct asoc_simple_priv *priv)
+{
+ struct device *dev = simple_priv_to_dev(priv);
+ struct device_node *node;
+ int ret;
+
+ node = of_get_child_by_name(dev->of_node, PREFIX "additional-devs");
+ if (!node)
+ return 0;
+
+ ret = of_platform_populate(node, NULL, NULL, dev);
+ of_node_put(node);
+ if (ret)
+ return ret;
+
+ return devm_add_action_or_reset(dev, simple_depopulate_aux, priv);
+}
+
static int simple_parse_of(struct asoc_simple_priv *priv, struct link_info *li)
{
struct snd_soc_card *card = simple_priv_to_card(priv);
@@ -493,6 +531,10 @@ static int simple_parse_of(struct asoc_simple_priv *priv, struct link_info *li)
if (ret < 0)
return ret;
+ ret = simple_populate_aux(priv);
+ if (ret < 0)
+ return ret;
+
ret = snd_soc_of_parse_aux_devs(card, PREFIX "aux-devs");
return ret;
--
2.40.1
next prev parent reply other threads:[~2023-06-23 9:00 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-23 8:58 [PATCH v6 00/13] Add support for IIO devices in ASoC Herve Codina
2023-06-23 8:58 ` [PATCH v6 01/13] ASoC: dt-bindings: Add audio-iio-aux Herve Codina
2023-06-27 9:53 ` Christophe Leroy
2023-06-27 9:54 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 02/13] ASoC: dt-bindings: simple-card: Add additional-devs subnode Herve Codina
2023-06-27 9:53 ` Christophe Leroy
2023-06-27 9:54 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 03/13] iio: inkern: Check error explicitly in iio_channel_read_max() Herve Codina
2023-06-27 9:54 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 04/13] iio: consumer.h: Fix raw values documentation notes Herve Codina
2023-06-27 9:55 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 05/13] iio: inkern: Remove the 'unused' variable usage in iio_channel_read_max() Herve Codina
2023-06-27 9:56 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 06/13] iio: inkern: Fix headers inclusion order Herve Codina
2023-06-27 9:56 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 07/13] minmax: Introduce {min,max}_array() Herve Codina
2023-06-27 9:57 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 08/13] iio: inkern: Use max_array() to get the maximum value from an array Herve Codina
2023-06-27 9:57 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 09/13] iio: inkern: Replace a FIXME comment by a TODO one Herve Codina
2023-06-27 9:57 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 10/13] iio: inkern: Add a helper to query an available minimum raw value Herve Codina
2023-06-27 9:58 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 11/13] ASoC: soc-dapm.h: Convert macros to return a compound literal Herve Codina
2023-06-27 10:00 ` Christophe Leroy
2023-06-23 8:58 ` [PATCH v6 12/13] ASoC: codecs: Add support for the generic IIO auxiliary devices Herve Codina
2023-06-27 10:01 ` Christophe Leroy
2023-06-23 8:58 ` Herve Codina [this message]
2023-06-27 10:02 ` [PATCH v6 13/13] ASoC: simple-card: Handle additional devices Christophe Leroy
2023-07-12 11:46 ` [PATCH v6 00/13] Add support for IIO devices in ASoC Mark Brown
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=20230623085830.749991-14-herve.codina@bootlin.com \
--to=herve.codina@bootlin.com \
--cc=alsa-devel@alsa-project.org \
--cc=andy.shevchenko@gmail.com \
--cc=broonie@kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=jic23@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=lars@metafoo.de \
--cc=lgirdwood@gmail.com \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=perex@perex.cz \
--cc=robh+dt@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=tiwai@suse.com \
--cc=wojciech.ziemba@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).