ASoC: simple-card-utils.c: enable multi Component support
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>
This commit is contained in:
parent
bbde4a30c6
commit
90de551c1b
4 changed files with 22 additions and 8 deletions
|
@ -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_card_probe(struct snd_soc_card *card);
|
||||||
int asoc_graph_is_ports0(struct device_node *port);
|
int asoc_graph_is_ports0(struct device_node *port);
|
||||||
int asoc_graph_parse_dai(struct device_node *ep,
|
int asoc_graph_parse_dai(struct device *dev, struct device_node *ep,
|
||||||
struct snd_soc_dai_link_component *dlc,
|
struct snd_soc_dai_link_component *dlc, int *is_single_link);
|
||||||
int *is_single_link);
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
static inline void asoc_simple_debug_dai(struct asoc_simple_priv *priv,
|
static inline void asoc_simple_debug_dai(struct asoc_simple_priv *priv,
|
||||||
|
|
|
@ -126,7 +126,7 @@ static int graph_parse_node(struct asoc_simple_priv *priv,
|
||||||
|
|
||||||
graph_parse_mclk_fs(top, ep, dai_props);
|
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)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -407,7 +407,7 @@ static int __graph_parse_node(struct asoc_simple_priv *priv,
|
||||||
|
|
||||||
graph_parse_mclk_fs(ep, dai_props);
|
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)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -1066,12 +1066,12 @@ static int graph_get_dai_id(struct device_node *ep)
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
int asoc_graph_parse_dai(struct device_node *ep,
|
int asoc_graph_parse_dai(struct device *dev, struct device_node *ep,
|
||||||
struct snd_soc_dai_link_component *dlc,
|
struct snd_soc_dai_link_component *dlc, int *is_single_link)
|
||||||
int *is_single_link)
|
|
||||||
{
|
{
|
||||||
struct device_node *node;
|
struct device_node *node;
|
||||||
struct of_phandle_args args = {};
|
struct of_phandle_args args = {};
|
||||||
|
struct snd_soc_dai *dai;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!ep)
|
if (!ep)
|
||||||
|
@ -1079,6 +1079,20 @@ int asoc_graph_parse_dai(struct device_node *ep,
|
||||||
|
|
||||||
node = of_graph_get_port_parent(ep);
|
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 */
|
/* Get dai->name */
|
||||||
args.np = node;
|
args.np = node;
|
||||||
args.args[0] = graph_get_dai_id(ep);
|
args.args[0] = graph_get_dai_id(ep);
|
||||||
|
@ -1109,6 +1123,7 @@ int asoc_graph_parse_dai(struct device_node *ep,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parse_dai_end:
|
||||||
if (is_single_link)
|
if (is_single_link)
|
||||||
*is_single_link = of_graph_get_endpoint_count(node) == 1;
|
*is_single_link = of_graph_get_endpoint_count(node) == 1;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue