Skip to content

Commit

Permalink
ASoC: simple-card-utils.c: enable multi Component support
Browse files Browse the repository at this point in the history
If CPU/Codec driver keeps its DAI node, we can directly identify actual
DAI by using snd_soc_get_dai_via_args().
This means we can use multi Component.

This patch enables multi Component support on Audio Graph Card/Card2.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87a5w4o949.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Kuninori Morimoto authored and Mark Brown committed Jul 17, 2023
1 parent bbde4a3 commit 90de551
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 8 deletions.
5 changes: 2 additions & 3 deletions include/sound/simple_card_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -192,9 +192,8 @@ int asoc_simple_remove(struct platform_device *pdev);

int asoc_graph_card_probe(struct snd_soc_card *card);
int asoc_graph_is_ports0(struct device_node *port);
int asoc_graph_parse_dai(struct device_node *ep,
struct snd_soc_dai_link_component *dlc,
int *is_single_link);
int asoc_graph_parse_dai(struct device *dev, struct device_node *ep,
struct snd_soc_dai_link_component *dlc, int *is_single_link);

#ifdef DEBUG
static inline void asoc_simple_debug_dai(struct asoc_simple_priv *priv,
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/generic/audio-graph-card.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ static int graph_parse_node(struct asoc_simple_priv *priv,

graph_parse_mclk_fs(top, ep, dai_props);

ret = asoc_graph_parse_dai(ep, dlc, cpu);
ret = asoc_graph_parse_dai(dev, ep, dlc, cpu);
if (ret < 0)
return ret;

Expand Down
2 changes: 1 addition & 1 deletion sound/soc/generic/audio-graph-card2.c
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,7 @@ static int __graph_parse_node(struct asoc_simple_priv *priv,

graph_parse_mclk_fs(ep, dai_props);

ret = asoc_graph_parse_dai(ep, dlc, &is_single_links);
ret = asoc_graph_parse_dai(dev, ep, dlc, &is_single_links);
if (ret < 0)
return ret;

Expand Down
21 changes: 18 additions & 3 deletions sound/soc/generic/simple-card-utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -1066,19 +1066,33 @@ static int graph_get_dai_id(struct device_node *ep)
return id;
}

int asoc_graph_parse_dai(struct device_node *ep,
struct snd_soc_dai_link_component *dlc,
int *is_single_link)
int asoc_graph_parse_dai(struct device *dev, struct device_node *ep,
struct snd_soc_dai_link_component *dlc, int *is_single_link)
{
struct device_node *node;
struct of_phandle_args args = {};
struct snd_soc_dai *dai;
int ret;

if (!ep)
return 0;

node = of_graph_get_port_parent(ep);

/*
* Try to find from DAI node
*/
args.np = ep;
dai = snd_soc_get_dai_via_args(&args);
if (dai) {
dlc->dai_name = snd_soc_dai_name_get(dai);
dlc->dai_args = snd_soc_copy_dai_args(dev, &args);
if (!dlc->dai_args)
return -ENOMEM;

goto parse_dai_end;
}

/* Get dai->name */
args.np = node;
args.args[0] = graph_get_dai_id(ep);
Expand Down Expand Up @@ -1109,6 +1123,7 @@ int asoc_graph_parse_dai(struct device_node *ep,
return ret;
}

parse_dai_end:
if (is_single_link)
*is_single_link = of_graph_get_endpoint_count(node) == 1;

Expand Down

0 comments on commit 90de551

Please sign in to comment.