mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
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
This commit is contained in:
commit
00a745878c
|
|
@ -181,7 +181,7 @@ void simple_util_canonicalize_platform(struct snd_soc_dai_link_component *platfo
|
|||
void simple_util_canonicalize_cpu(struct snd_soc_dai_link_component *cpus,
|
||||
int is_single_links);
|
||||
|
||||
void simple_util_clean_reference(struct snd_soc_card *card);
|
||||
void simple_util_clean_reference(struct simple_util_priv *priv);
|
||||
|
||||
void simple_util_parse_convert(struct device_node *np, char *prefix,
|
||||
struct simple_util_data *data);
|
||||
|
|
@ -189,18 +189,37 @@ bool simple_util_is_convert_required(const struct simple_util_data *data);
|
|||
|
||||
int simple_util_get_sample_fmt(struct simple_util_data *data);
|
||||
|
||||
int simple_util_parse_routing(struct snd_soc_card *card,
|
||||
char *prefix);
|
||||
int simple_util_parse_widgets(struct snd_soc_card *card,
|
||||
char *prefix);
|
||||
int simple_util_parse_pin_switches(struct snd_soc_card *card,
|
||||
char *prefix);
|
||||
int simple_util_parse_property(struct simple_util_priv *priv,
|
||||
int (*func)(struct snd_soc_card *card, const char *propname),
|
||||
char *prefix, char *property);
|
||||
static inline int simple_util_parse_routing(struct simple_util_priv *priv, char *prefix)
|
||||
{
|
||||
return simple_util_parse_property(priv, snd_soc_of_parse_audio_routing,
|
||||
prefix, "routing");
|
||||
}
|
||||
|
||||
static inline int simple_util_parse_widgets(struct simple_util_priv *priv, char *prefix)
|
||||
{
|
||||
return simple_util_parse_property(priv, snd_soc_of_parse_audio_simple_widgets,
|
||||
prefix, "widgets");
|
||||
}
|
||||
|
||||
static inline int simple_util_parse_pin_switches(struct simple_util_priv *priv, char *prefix)
|
||||
{
|
||||
return simple_util_parse_property(priv, snd_soc_of_parse_pin_switches,
|
||||
prefix, "pin-switches");
|
||||
}
|
||||
|
||||
static inline int simple_util_parse_aux_devs(struct simple_util_priv *priv, char *prefix)
|
||||
{
|
||||
return simple_util_parse_property(priv, snd_soc_of_parse_aux_devs,
|
||||
prefix, "aux-devs");
|
||||
}
|
||||
|
||||
int simple_util_init_jack(struct snd_soc_card *card,
|
||||
struct simple_util_jack *sjack,
|
||||
int is_hp, char *prefix, char *pin);
|
||||
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);
|
||||
int simple_util_init_priv(struct simple_util_priv *priv,
|
||||
struct link_info *li);
|
||||
void simple_util_remove(struct platform_device *pdev);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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,31 +1316,39 @@ 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 end;
|
||||
|
||||
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;
|
||||
|
||||
ret = simple_util_parse_routing(card, NULL);
|
||||
ret = simple_util_parse_aux_devs(priv, NULL);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
|
|
@ -1349,10 +1357,6 @@ int audio_graph2_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);
|
||||
|
||||
if ((hooks) && (hooks)->hook_post) {
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -517,44 +517,6 @@ static int simple_populate_aux(struct simple_util_priv *priv)
|
|||
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;
|
||||
struct snd_soc_card *card = simple_priv_to_card(priv);
|
||||
struct device *dev = card->dev;
|
||||
int ret = -EINVAL;
|
||||
|
||||
/* 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";
|
||||
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;
|
||||
|
||||
ret = simple_util_parse_aux_devs(priv, PREFIX);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
/* 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 = simple_populate_aux(priv);
|
||||
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 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[] = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user