@@ -515,7 +515,10 @@ static int graph_parse_node(struct simple_util_priv *priv,
int ret = 0;
if (graph_lnk_is_multi(port)) {
+ struct device_node *ports = of_get_parent(port);
int idx;
+ int num;
+ char *props = "ch-maps";
of_node_get(port);
@@ -530,6 +533,32 @@ static int graph_parse_node(struct simple_util_priv *priv,
if (ret < 0)
break;
}
+
+ /* read "ch-maps" property if exist */
+ num = of_property_count_elems_of_size(ports, props, sizeof(u32));
+ if (num > 0) {
+ struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);
+ struct device *dev = simple_priv_to_dev(priv);
+ struct snd_soc_dai_link_ch_map *ch_maps = devm_kcalloc(dev, num, sizeof(*ch_maps), GFP_KERNEL);
+ int *temp = devm_kcalloc(dev, num, sizeof(int), GFP_KERNEL);
+ int i;
+
+ if (!ch_maps || !temp) {
+ ret = -ENOMEM;
+ goto multi_end;
+ }
+
+ ret = of_property_read_u32_array(ports, props, temp, num);
+ if (ret < 0)
+ goto multi_end;
+
+ dai_link->ch_maps = ch_maps;
+ for (i = 0; i < num; i++)
+ dai_link->ch_maps[i].connected_node = temp[i];
+multi_end:
+ devm_kfree(dev, temp);
+ }
+ of_node_put(ports);
} else {
/* Single CPU / Codec */
ep = port_to_endpoint(port);
Now ASoC is supporting CPU:Codec = N:M support. This patch enables it on Audio Graph Card2. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> --- sound/soc/generic/audio-graph-card2.c | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+)