summaryrefslogtreecommitdiff
path: root/sound/soc/generic
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-07-10 17:04:01 +0100
committerMark Brown <broonie@kernel.org>2026-07-10 17:04:01 +0100
commit00a745878c355765c61feb78e7e36593e475902f (patch)
tree0c946896dd7c5073e96d3f707b6ceae71073e26a /sound/soc/generic
parent83800132cd843bbec05e3a902896f2529b777705 (diff)
parent6f5c4f6ffa8bd87803145d03b1ad36d4fa50d562 (diff)
downloadlinux-next-00a745878c355765c61feb78e7e36593e475902f.tar.gz
linux-next-00a745878c355765c61feb78e7e36593e475902f.zip
ASoC: cleanup simple-card/audio-graph-card1/2
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> says: Simple Card has removed platform data support. We can cleanup and more sync Simple-Card/Audio-Graph-Card/Audio-Graph-Card2. Link: https://patch.msgid.link/87ik6yxj0t.wl-kuninori.morimoto.gx@renesas.com
Diffstat (limited to 'sound/soc/generic')
-rw-r--r--sound/soc/generic/audio-graph-card.c23
-rw-r--r--sound/soc/generic/audio-graph-card2.c40
-rw-r--r--sound/soc/generic/simple-card-utils.c82
-rw-r--r--sound/soc/generic/simple-card.c126
4 files changed, 121 insertions, 150 deletions
diff --git a/sound/soc/generic/audio-graph-card.c b/sound/soc/generic/audio-graph-card.c
index 18ce4ee06350..73ea562ce52b 100644
--- a/sound/soc/generic/audio-graph-card.c
+++ b/sound/soc/generic/audio-graph-card.c
@@ -579,14 +579,18 @@ int audio_graph_parse_of(struct simple_util_priv *priv, struct device *dev)
goto end;
}
- ret = simple_util_parse_widgets(card, NULL);
+ ret = simple_util_parse_widgets(priv, NULL);
if (ret < 0)
goto end;
- ret = simple_util_parse_routing(card, NULL);
+ ret = simple_util_parse_routing(priv, NULL);
if (ret < 0)
goto end;
+ ret = simple_util_parse_card_name(priv, NULL);
+ if (ret < 0)
+ goto err;
+
memset(li, 0, sizeof(*li));
ret = graph_for_each_link(priv, li,
graph_dai_link_of,
@@ -594,23 +598,18 @@ int audio_graph_parse_of(struct simple_util_priv *priv, struct device *dev)
if (ret < 0)
goto err;
- ret = simple_util_parse_card_name(priv, NULL);
- if (ret < 0)
- goto err;
-
snd_soc_card_set_drvdata(card, priv);
simple_util_debug_info(priv);
ret = devm_snd_soc_register_card(dev, card);
- if (ret < 0)
- goto err;
-
- return 0;
err:
- simple_util_clean_reference(card);
+ if (ret < 0) {
+ simple_util_clean_reference(priv);
+ return dev_err_probe(dev, ret, "parse error\n");
+ }
end:
- return dev_err_probe(dev, ret, "parse error\n");
+ return graph_ret(priv, ret);
}
EXPORT_SYMBOL_GPL(audio_graph_parse_of);
diff --git a/sound/soc/generic/audio-graph-card2.c b/sound/soc/generic/audio-graph-card2.c
index 0202ed0ee78e..e3e92025b317 100644
--- a/sound/soc/generic/audio-graph-card2.c
+++ b/sound/soc/generic/audio-graph-card2.c
@@ -1303,11 +1303,11 @@ int audio_graph2_parse_of(struct simple_util_priv *priv, struct device *dev,
struct graph2_custom_hooks *hooks)
{
struct snd_soc_card *card = simple_priv_to_card(priv);
- int ret;
+ int ret = -ENOMEM;
struct link_info *li __free(kfree) = kzalloc_obj(*li);
if (!li)
- return -ENOMEM;
+ goto end;
card->probe = graph_util_card_probe;
card->owner = THIS_MODULE;
@@ -1316,40 +1316,44 @@ int audio_graph2_parse_of(struct simple_util_priv *priv, struct device *dev,
if ((hooks) && (hooks)->hook_pre) {
ret = (hooks)->hook_pre(priv);
if (ret < 0)
- goto err;
+ goto end;
}
ret = graph_for_each_link(priv, hooks, li, graph_count);
if (!li->link)
ret = -EINVAL;
if (ret < 0)
- goto err;
+ goto end;
ret = simple_util_init_priv(priv, li);
if (ret < 0)
- goto err;
+ goto end;
priv->pa_gpio = devm_gpiod_get_optional(dev, "pa", GPIOD_OUT_LOW);
if (IS_ERR(priv->pa_gpio)) {
ret = PTR_ERR(priv->pa_gpio);
dev_err(dev, "failed to get amplifier gpio: %d\n", ret);
- goto err;
+ goto end;
}
- ret = simple_util_parse_widgets(card, NULL);
+ ret = simple_util_parse_widgets(priv, NULL);
if (ret < 0)
- goto err;
+ goto end;
- ret = simple_util_parse_routing(card, NULL);
+ ret = simple_util_parse_routing(priv, NULL);
+ if (ret < 0)
+ goto end;
+
+ ret = simple_util_parse_card_name(priv, NULL);
if (ret < 0)
goto err;
- memset(li, 0, sizeof(*li));
- ret = graph_for_each_link(priv, hooks, li, graph_link);
+ ret = simple_util_parse_aux_devs(priv, NULL);
if (ret < 0)
goto err;
- ret = simple_util_parse_card_name(priv, NULL);
+ memset(li, 0, sizeof(*li));
+ ret = graph_for_each_link(priv, hooks, li, graph_link);
if (ret < 0)
goto err;
@@ -1363,15 +1367,13 @@ int audio_graph2_parse_of(struct simple_util_priv *priv, struct device *dev,
simple_util_debug_info(priv);
- ret = snd_soc_of_parse_aux_devs(card, "aux-devs");
- if (ret < 0)
- goto err;
-
ret = devm_snd_soc_register_card(dev, card);
err:
- if (ret < 0)
- dev_err_probe(dev, ret, "parse error\n");
-
+ if (ret < 0) {
+ simple_util_clean_reference(priv);
+ return dev_err_probe(dev, ret, "parse error\n");
+ }
+end:
return graph_ret(priv, ret);
}
EXPORT_SYMBOL_GPL(audio_graph2_parse_of);
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index e5cb602fd248..42019daa5e04 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -216,6 +216,27 @@ int simple_util_set_dailink_name(struct simple_util_priv *priv,
}
EXPORT_SYMBOL_GPL(simple_util_set_dailink_name);
+int simple_util_parse_property(struct simple_util_priv *priv,
+ int (*func)(struct snd_soc_card *card, const char *propname),
+ char *prefix, char *property)
+{
+ struct snd_soc_card *card = simple_priv_to_card(priv);
+ struct device_node *node = card->dev->of_node;
+ char prop[128];
+
+ if (!prefix)
+ prefix = "";
+
+ snprintf(prop, sizeof(prop), "%s%s", prefix, property);
+
+ /* no property is not error */
+ if (!of_property_present(node, prop))
+ return 0;
+
+ return func(card, prop);
+}
+EXPORT_SYMBOL_GPL(simple_util_parse_property);
+
int simple_util_parse_card_name(struct simple_util_priv *priv,
char *prefix)
{
@@ -731,11 +752,12 @@ void simple_util_canonicalize_cpu(struct snd_soc_dai_link_component *cpus,
}
EXPORT_SYMBOL_GPL(simple_util_canonicalize_cpu);
-void simple_util_clean_reference(struct snd_soc_card *card)
+void simple_util_clean_reference(struct simple_util_priv *priv)
{
struct snd_soc_dai_link *dai_link;
struct snd_soc_dai_link_component *cpu;
struct snd_soc_dai_link_component *codec;
+ struct snd_soc_card *card = simple_priv_to_card(priv);
int i, j;
for_each_card_prelinks(card, i, dai_link) {
@@ -747,57 +769,6 @@ void simple_util_clean_reference(struct snd_soc_card *card)
}
EXPORT_SYMBOL_GPL(simple_util_clean_reference);
-int simple_util_parse_routing(struct snd_soc_card *card,
- char *prefix)
-{
- struct device_node *node = card->dev->of_node;
- char prop[128];
-
- if (!prefix)
- prefix = "";
-
- snprintf(prop, sizeof(prop), "%s%s", prefix, "routing");
-
- if (!of_property_present(node, prop))
- return 0;
-
- return snd_soc_of_parse_audio_routing(card, prop);
-}
-EXPORT_SYMBOL_GPL(simple_util_parse_routing);
-
-int simple_util_parse_widgets(struct snd_soc_card *card,
- char *prefix)
-{
- struct device_node *node = card->dev->of_node;
- char prop[128];
-
- if (!prefix)
- prefix = "";
-
- snprintf(prop, sizeof(prop), "%s%s", prefix, "widgets");
-
- if (of_property_present(node, prop))
- return snd_soc_of_parse_audio_simple_widgets(card, prop);
-
- /* no widgets is not error */
- return 0;
-}
-EXPORT_SYMBOL_GPL(simple_util_parse_widgets);
-
-int simple_util_parse_pin_switches(struct snd_soc_card *card,
- char *prefix)
-{
- char prop[128];
-
- if (!prefix)
- prefix = "";
-
- snprintf(prop, sizeof(prop), "%s%s", prefix, "pin-switches");
-
- return snd_soc_of_parse_pin_switches(card, prop);
-}
-EXPORT_SYMBOL_GPL(simple_util_parse_pin_switches);
-
int simple_util_init_jack(struct snd_soc_card *card,
struct simple_util_jack *sjack,
int is_hp, char *prefix,
@@ -854,9 +825,9 @@ int simple_util_init_jack(struct snd_soc_card *card,
}
EXPORT_SYMBOL_GPL(simple_util_init_jack);
-int simple_util_init_aux_jacks(struct simple_util_priv *priv, char *prefix)
+int simple_util_init_aux_jacks(struct snd_soc_card *card, char *prefix)
{
- struct snd_soc_card *card = simple_priv_to_card(priv);
+ struct simple_util_priv *priv = snd_soc_card_get_drvdata(card);
struct snd_soc_component *component;
int found_jack_index = 0;
int type = 0;
@@ -1026,8 +997,9 @@ EXPORT_SYMBOL_GPL(simple_util_init_priv);
void simple_util_remove(struct platform_device *pdev)
{
struct snd_soc_card *card = platform_get_drvdata(pdev);
+ struct simple_util_priv *priv = snd_soc_card_get_drvdata(card);
- simple_util_clean_reference(card);
+ simple_util_clean_reference(priv);
}
EXPORT_SYMBOL_GPL(simple_util_remove);
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index b4957e025211..abfbc9fd7c6d 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -517,44 +517,6 @@ end:
return simple_ret(priv, ret);
}
-static int simple_parse_of(struct simple_util_priv *priv, struct link_info *li)
-{
- struct snd_soc_card *card = simple_priv_to_card(priv);
- int ret;
-
- ret = simple_util_parse_widgets(card, PREFIX);
- if (ret < 0)
- goto end;
-
- ret = simple_util_parse_routing(card, PREFIX);
- if (ret < 0)
- goto end;
-
- ret = simple_util_parse_pin_switches(card, PREFIX);
- if (ret < 0)
- goto end;
-
- /* Single/Muti DAI link(s) & New style of DT node */
- memset(li, 0, sizeof(*li));
- ret = simple_for_each_link(priv, li,
- simple_dai_link_of,
- simple_dai_link_of_dpcm);
- if (ret < 0)
- goto end;
-
- ret = simple_util_parse_card_name(priv, PREFIX);
- if (ret < 0)
- goto end;
-
- ret = simple_populate_aux(priv);
- if (ret < 0)
- goto end;
-
- ret = snd_soc_of_parse_aux_devs(card, PREFIX "aux-devs");
-end:
- return simple_ret(priv, ret);
-}
-
static int simple_count_noml(struct simple_util_priv *priv,
struct device_node *np,
struct device_node *codec,
@@ -699,28 +661,19 @@ static int simple_soc_probe(struct snd_soc_card *card)
if (ret < 0)
goto end;
- ret = simple_util_init_aux_jacks(priv, PREFIX);
+ ret = simple_util_init_aux_jacks(card, PREFIX);
end:
return simple_ret(priv, ret);
}
-static int simple_probe(struct platform_device *pdev)
+static int simple_parse_of(struct simple_util_priv *priv)
{
- struct simple_util_priv *priv;
- struct device *dev = &pdev->dev;
- struct snd_soc_card *card;
- int ret;
-
- /* Allocate the private data and the DAI link array */
- priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
- if (!priv)
- return -ENOMEM;
+ struct snd_soc_card *card = simple_priv_to_card(priv);
+ struct device *dev = card->dev;
+ int ret = -EINVAL;
- card = simple_priv_to_card(priv);
- card->owner = THIS_MODULE;
- card->dev = dev;
- card->probe = simple_soc_probe;
- card->driver_name = "simple-card";
+ if (!dev)
+ goto end;
ret = -ENOMEM;
struct link_info *li __free(kfree) = kzalloc_obj(*li);
@@ -739,25 +692,70 @@ static int simple_probe(struct platform_device *pdev)
if (ret < 0)
goto end;
- ret = simple_parse_of(priv, li);
- if (ret < 0) {
- dev_err_probe(dev, ret, "parse error\n");
+ ret = simple_util_parse_widgets(priv, PREFIX);
+ if (ret < 0)
+ goto end;
+
+ ret = simple_util_parse_routing(priv, PREFIX);
+ if (ret < 0)
+ goto end;
+
+ ret = simple_util_parse_pin_switches(priv, PREFIX);
+ if (ret < 0)
+ goto end;
+
+ ret = simple_util_parse_card_name(priv, PREFIX);
+ if (ret < 0)
goto err;
- }
- snd_soc_card_set_drvdata(card, priv);
+ ret = simple_util_parse_aux_devs(priv, PREFIX);
+ if (ret < 0)
+ goto err;
- simple_util_debug_info(priv);
+ /* Single/Muti DAI link(s) & New style of DT node */
+ memset(li, 0, sizeof(*li));
+ ret = simple_for_each_link(priv, li,
+ simple_dai_link_of,
+ simple_dai_link_of_dpcm);
+ if (ret < 0)
+ goto err;
- ret = devm_snd_soc_register_card(dev, card);
+ ret = simple_populate_aux(priv);
if (ret < 0)
goto err;
- return 0;
+ snd_soc_card_set_drvdata(card, priv);
+
+ simple_util_debug_info(priv);
+
+ ret = devm_snd_soc_register_card(dev, card);
err:
- simple_util_clean_reference(card);
+ if (ret < 0) {
+ simple_util_clean_reference(priv);
+ return dev_err_probe(dev, ret, "parse error\n");
+ }
end:
- return dev_err_probe(dev, ret, "parse error\n");
+ return simple_ret(priv, ret);
+}
+
+static int simple_probe(struct platform_device *pdev)
+{
+ struct simple_util_priv *priv;
+ struct device *dev = &pdev->dev;
+ struct snd_soc_card *card;
+
+ /* Allocate the private data and the DAI link array */
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ card = simple_priv_to_card(priv);
+ card->owner = THIS_MODULE;
+ card->dev = dev;
+ card->probe = simple_soc_probe;
+ card->driver_name = "simple-card";
+
+ return simple_parse_of(priv);
}
static const struct of_device_id simple_of_match[] = {