sound/soc/ti/j721e-evm.c | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-)
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
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.
© 2016 - 2026 Red Hat, Inc.