Skip to content

Commit 0d4f080

Browse files
morimotorobherring
authored andcommitted
ASoC: audio-graph-card2: use new of_graph functions
Now we can use new port related functions for port parsing. Use it. Signed-off-by: Kuninori Morimoto <[email protected]> Acked-by: Mark Brown <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Rob Herring (Arm) <[email protected]>
1 parent 75e3d96 commit 0d4f080

File tree

1 file changed

+48
-56
lines changed

1 file changed

+48
-56
lines changed

sound/soc/generic/audio-graph-card2.c

Lines changed: 48 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,6 @@ enum graph_type {
234234
#define GRAPH_NODENAME_DPCM "dpcm"
235235
#define GRAPH_NODENAME_C2C "codec2codec"
236236

237-
#define port_to_endpoint(port) of_get_child_by_name(port, "endpoint")
238-
239237
#define ep_to_port(ep) of_get_parent(ep)
240238
static struct device_node *port_to_ports(struct device_node *port)
241239
{
@@ -351,14 +349,9 @@ static struct device_node *graph_get_next_multi_ep(struct device_node **port)
351349
* port@1 { rep1 };
352350
* };
353351
*/
354-
do {
355-
*port = of_get_next_child(ports, *port);
356-
if (!*port)
357-
break;
358-
} while (!of_node_name_eq(*port, "port"));
359-
352+
*port = of_graph_get_next_port(ports, *port);
360353
if (*port) {
361-
ep = port_to_endpoint(*port);
354+
ep = of_graph_get_next_port_endpoint(*port, NULL);
362355
rep = of_graph_get_remote_endpoint(ep);
363356
}
364357

@@ -530,67 +523,66 @@ static int graph_parse_node_multi_nm(struct snd_soc_dai_link *dai_link,
530523
* };
531524
* };
532525
*/
533-
struct device_node *mcpu_ep = port_to_endpoint(mcpu_port);
534-
struct device_node *mcpu_ep_n = mcpu_ep;
535-
struct device_node *mcpu_port_top = of_get_next_child(port_to_ports(mcpu_port), NULL);
536-
struct device_node *mcpu_ep_top = port_to_endpoint(mcpu_port_top);
526+
struct device_node *mcpu_ep = of_graph_get_next_port_endpoint(mcpu_port, NULL);
527+
struct device_node *mcpu_ports = port_to_ports(mcpu_port);
528+
struct device_node *mcpu_port_top = of_graph_get_next_port(mcpu_ports, NULL);
529+
struct device_node *mcpu_ep_top = of_graph_get_next_port_endpoint(mcpu_port_top, NULL);
537530
struct device_node *mcodec_ep_top = of_graph_get_remote_endpoint(mcpu_ep_top);
538531
struct device_node *mcodec_port_top = ep_to_port(mcodec_ep_top);
539532
struct device_node *mcodec_ports = port_to_ports(mcodec_port_top);
540533
int nm_max = max(dai_link->num_cpus, dai_link->num_codecs);
541-
int ret = -EINVAL;
534+
int ret = 0;
542535

543-
if (cpu_idx > dai_link->num_cpus)
536+
if (cpu_idx > dai_link->num_cpus) {
537+
ret = -EINVAL;
544538
goto mcpu_err;
539+
}
545540

546-
while (1) {
541+
for_each_of_graph_port_endpoint(mcpu_port, mcpu_ep_n) {
547542
struct device_node *mcodec_ep_n;
548-
struct device_node *mcodec_port_i;
549543
struct device_node *mcodec_port;
550544
int codec_idx;
551545

546+
/* ignore 1st ep which is for element */
547+
if (mcpu_ep_n == mcpu_ep)
548+
continue;
549+
552550
if (*nm_idx > nm_max)
553551
break;
554552

555-
mcpu_ep_n = of_get_next_child(mcpu_port, mcpu_ep_n);
556-
if (!mcpu_ep_n) {
557-
ret = 0;
558-
break;
559-
}
560-
561553
mcodec_ep_n = of_graph_get_remote_endpoint(mcpu_ep_n);
562554
mcodec_port = ep_to_port(mcodec_ep_n);
563555

564-
if (mcodec_ports != port_to_ports(mcodec_port))
556+
if (mcodec_ports != port_to_ports(mcodec_port)) {
557+
ret = -EINVAL;
565558
goto mcpu_err;
559+
}
566560

567561
codec_idx = 0;
568-
mcodec_port_i = of_get_next_child(mcodec_ports, NULL);
569-
while (1) {
570-
if (codec_idx > dai_link->num_codecs)
571-
goto mcodec_err;
572-
573-
mcodec_port_i = of_get_next_child(mcodec_ports, mcodec_port_i);
562+
ret = -EINVAL;
563+
for_each_of_graph_port(mcodec_ports, mcodec_port_i) {
574564

575-
if (!mcodec_port_i)
576-
goto mcodec_err;
565+
/* ignore 1st port which is for pair connection */
566+
if (mcodec_port_top == mcodec_port_i)
567+
continue;
577568

578-
if (mcodec_port_i == mcodec_port)
569+
if (codec_idx > dai_link->num_codecs)
579570
break;
580571

572+
if (mcodec_port_i == mcodec_port) {
573+
dai_link->ch_maps[*nm_idx].cpu = cpu_idx;
574+
dai_link->ch_maps[*nm_idx].codec = codec_idx;
575+
576+
(*nm_idx)++;
577+
ret = 0;
578+
break;
579+
}
581580
codec_idx++;
582581
}
583-
584-
dai_link->ch_maps[*nm_idx].cpu = cpu_idx;
585-
dai_link->ch_maps[*nm_idx].codec = codec_idx;
586-
587-
(*nm_idx)++;
588-
589-
of_node_put(mcodec_port_i);
590-
mcodec_err:
591582
of_node_put(mcodec_port);
592-
of_node_put(mcpu_ep_n);
593583
of_node_put(mcodec_ep_n);
584+
if (ret < 0)
585+
break;
594586
}
595587
mcpu_err:
596588
of_node_put(mcpu_ep);
@@ -674,7 +666,7 @@ static int graph_parse_node_single(struct simple_util_priv *priv,
674666
struct device_node *port,
675667
struct link_info *li, int is_cpu)
676668
{
677-
struct device_node *ep = port_to_endpoint(port);
669+
struct device_node *ep = of_graph_get_next_port_endpoint(port, NULL);
678670
int ret = __graph_parse_node(priv, gtype, ep, li, is_cpu, 0);
679671

680672
of_node_put(ep);
@@ -769,7 +761,7 @@ static void graph_link_init(struct simple_util_priv *priv,
769761
of_node_put(port_cpu);
770762
port_cpu = ep_to_port(ep_cpu);
771763
} else {
772-
ep_cpu = port_to_endpoint(port_cpu);
764+
ep_cpu = of_graph_get_next_port_endpoint(port_cpu, NULL);
773765
}
774766
ports_cpu = port_to_ports(port_cpu);
775767

@@ -779,7 +771,7 @@ static void graph_link_init(struct simple_util_priv *priv,
779771
of_node_put(port_cpu);
780772
port_codec = ep_to_port(ep_codec);
781773
} else {
782-
ep_codec = port_to_endpoint(port_codec);
774+
ep_codec = of_graph_get_next_port_endpoint(port_codec, NULL);
783775
}
784776
ports_codec = port_to_ports(port_codec);
785777

@@ -850,7 +842,7 @@ int audio_graph2_link_normal(struct simple_util_priv *priv,
850842
struct link_info *li)
851843
{
852844
struct device_node *cpu_port = lnk;
853-
struct device_node *cpu_ep = port_to_endpoint(cpu_port);
845+
struct device_node *cpu_ep = of_graph_get_next_port_endpoint(cpu_port, NULL);
854846
struct device_node *codec_port = of_graph_get_remote_port(cpu_ep);
855847
int ret;
856848

@@ -883,7 +875,7 @@ int audio_graph2_link_dpcm(struct simple_util_priv *priv,
883875
struct device_node *lnk,
884876
struct link_info *li)
885877
{
886-
struct device_node *ep = port_to_endpoint(lnk);
878+
struct device_node *ep = of_graph_get_next_port_endpoint(lnk, NULL);
887879
struct device_node *rep = of_graph_get_remote_endpoint(ep);
888880
struct device_node *cpu_port = NULL;
889881
struct device_node *codec_port = NULL;
@@ -1007,7 +999,7 @@ int audio_graph2_link_c2c(struct simple_util_priv *priv,
1007999
of_node_get(lnk);
10081000
port0 = lnk;
10091001
ports = port_to_ports(port0);
1010-
port1 = of_get_next_child(ports, lnk);
1002+
port1 = of_graph_get_next_port(ports, port0);
10111003

10121004
/*
10131005
* Card2 can use original Codec2Codec settings if DT has.
@@ -1037,8 +1029,8 @@ int audio_graph2_link_c2c(struct simple_util_priv *priv,
10371029
dai_link->num_c2c_params = 1;
10381030
}
10391031

1040-
ep0 = port_to_endpoint(port0);
1041-
ep1 = port_to_endpoint(port1);
1032+
ep0 = of_graph_get_next_port_endpoint(port0, NULL);
1033+
ep1 = of_graph_get_next_port_endpoint(port1, NULL);
10421034

10431035
codec0_port = of_graph_get_remote_port(ep0);
10441036
codec1_port = of_graph_get_remote_port(ep1);
@@ -1144,7 +1136,7 @@ static int graph_counter(struct device_node *lnk)
11441136
* CPU/Codec = N:M case has many endpoints.
11451137
* We can't use of_graph_get_endpoint_count() here
11461138
*/
1147-
return of_get_child_count(ports) - 1;
1139+
return of_graph_get_port_count(ports) - 1;
11481140
}
11491141
/*
11501142
* Single CPU / Codec
@@ -1158,7 +1150,7 @@ static int graph_count_normal(struct simple_util_priv *priv,
11581150
struct link_info *li)
11591151
{
11601152
struct device_node *cpu_port = lnk;
1161-
struct device_node *cpu_ep = port_to_endpoint(cpu_port);
1153+
struct device_node *cpu_ep = of_graph_get_next_port_endpoint(cpu_port, NULL);
11621154
struct device_node *codec_port = of_graph_get_remote_port(cpu_ep);
11631155

11641156
/*
@@ -1186,7 +1178,7 @@ static int graph_count_dpcm(struct simple_util_priv *priv,
11861178
struct device_node *lnk,
11871179
struct link_info *li)
11881180
{
1189-
struct device_node *ep = port_to_endpoint(lnk);
1181+
struct device_node *ep = of_graph_get_next_port_endpoint(lnk, NULL);
11901182
struct device_node *rport = of_graph_get_remote_port(ep);
11911183

11921184
/*
@@ -1228,9 +1220,9 @@ static int graph_count_c2c(struct simple_util_priv *priv,
12281220
{
12291221
struct device_node *ports = port_to_ports(lnk);
12301222
struct device_node *port0 = lnk;
1231-
struct device_node *port1 = of_get_next_child(ports, of_node_get(lnk));
1232-
struct device_node *ep0 = port_to_endpoint(port0);
1233-
struct device_node *ep1 = port_to_endpoint(port1);
1223+
struct device_node *port1 = of_graph_get_next_port(ports, of_node_get(port0));
1224+
struct device_node *ep0 = of_graph_get_next_port_endpoint(port0, NULL);
1225+
struct device_node *ep1 = of_graph_get_next_port_endpoint(port1, NULL);
12341226
struct device_node *codec0 = of_graph_get_remote_port(ep0);
12351227
struct device_node *codec1 = of_graph_get_remote_port(ep1);
12361228

0 commit comments

Comments
 (0)