[PATCH] ASoC: ti: j721e-evm: allocate dai_links with priv

Rosen Penev posted 1 patch 1 month, 3 weeks ago
There is a newer version of this series
sound/soc/ti/j721e-evm.c | 27 ++++++---------------------
1 file changed, 6 insertions(+), 21 deletions(-)
[PATCH] ASoC: ti: j721e-evm: allocate dai_links with priv
Posted by Rosen Penev 1 month, 3 weeks ago
Use a flexible array member to combine allocations. Simplifies the code
slightly.

Remove open coding of of_device_get_match_data as well as unnecessary
NULL checks. of_device_get_match_data cannot fail. All compatible
entries have a corresponding data section.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 sound/soc/ti/j721e-evm.c | 27 ++++++---------------------
 1 file changed, 6 insertions(+), 21 deletions(-)

diff --git a/sound/soc/ti/j721e-evm.c b/sound/soc/ti/j721e-evm.c
index faa62c1a9b8e..cbb10781e042 100644
--- a/sound/soc/ti/j721e-evm.c
+++ b/sound/soc/ti/j721e-evm.c
@@ -74,7 +74,6 @@ struct j721e_audio_domain {
 struct j721e_priv {
 	struct device *dev;
 	struct snd_soc_card card;
-	struct snd_soc_dai_link *dai_links;
 	struct snd_soc_codec_conf codec_conf[J721E_CODEC_CONF_COUNT];
 	struct snd_interval rate_range;
 	const struct j721e_audio_match_data *match_data;
@@ -84,6 +83,7 @@ struct j721e_priv {
 	struct j721e_audio_domain audio_domains[J721E_AUDIO_DOMAIN_LAST];
 
 	struct mutex mutex;
+	struct snd_soc_dai_link dai_links[];
 };
 
 static const struct snd_soc_dapm_widget j721e_cpb_dapm_widgets[] = {
@@ -844,33 +844,18 @@ static int j721e_soc_probe_ivi(struct j721e_priv *priv, int *link_idx,
 
 static int j721e_soc_probe(struct platform_device *pdev)
 {
-	struct device_node *node = pdev->dev.of_node;
+	const struct j721e_audio_match_data *match;
 	struct snd_soc_card *card;
-	const struct of_device_id *match;
 	struct j721e_priv *priv;
 	int link_cnt, conf_cnt, ret, i;
 
-	if (!node) {
-		dev_err(&pdev->dev, "of node is missing.\n");
-		return -ENODEV;
-	}
-
-	match = of_match_node(j721e_audio_of_match, node);
-	if (!match) {
-		dev_err(&pdev->dev, "No compatible match found\n");
-		return -ENODEV;
-	}
-
-	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	match = of_device_get_match_data(&pdev->dev);
+	priv = devm_kzalloc(&pdev->dev,
+			struct_size(priv, dai_links, match->num_links), GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
 
-	priv->match_data = match->data;
-
-	priv->dai_links = devm_kcalloc(&pdev->dev, priv->match_data->num_links,
-				       sizeof(*priv->dai_links), GFP_KERNEL);
-	if (!priv->dai_links)
-		return -ENOMEM;
+	priv->match_data = match;
 
 	for (i = 0; i < J721E_AUDIO_DOMAIN_LAST; i++)
 		priv->audio_domains[i].parent_clk_id = -1;
-- 
2.54.0
Re: [PATCH] ASoC: ti: j721e-evm: allocate dai_links with priv
Posted by Mark Brown 1 month, 2 weeks ago
On Sun, Apr 26, 2026 at 10:19:53PM -0700, Rosen Penev wrote:

> Remove open coding of of_device_get_match_data as well as unnecessary
> NULL checks. of_device_get_match_data cannot fail. All compatible
> entries have a corresponding data section.

of_device_get_match_data() can fail if there is no match data, for
example because someone is using sysfs to try to instantiate rather than
instantiating from device tree.  There is no reason to take out the
error handling here, it just makes things less robust.