Now we can use new port related functions for port parsing. Use it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto...@renesas.com>
Acked-by: Mark Brown <broo...@kernel.org>
---
 sound/soc/generic/audio-graph-card2.c | 111 ++++++++++++--------------
 1 file changed, 49 insertions(+), 62 deletions(-)

diff --git a/sound/soc/generic/audio-graph-card2.c 
b/sound/soc/generic/audio-graph-card2.c
index 56f7f946882e..e8ea201dbca3 100644
--- a/sound/soc/generic/audio-graph-card2.c
+++ b/sound/soc/generic/audio-graph-card2.c
@@ -234,8 +234,6 @@ enum graph_type {
 #define GRAPH_NODENAME_DPCM    "dpcm"
 #define GRAPH_NODENAME_C2C     "codec2codec"
 
-#define port_to_endpoint(port) of_get_child_by_name(port, "endpoint")
-
 #define ep_to_port(ep) of_get_parent(ep)
 static struct device_node *port_to_ports(struct device_node *port)
 {
@@ -351,14 +349,9 @@ static struct device_node *graph_get_next_multi_ep(struct 
device_node **port)
         *      port@1 { rep1 };
         * };
         */
-       do {
-               *port = of_get_next_child(ports, *port);
-               if (!*port)
-                       break;
-       } while (!of_node_name_eq(*port, "port"));
-
+       *port = of_graph_get_next_port(ports, *port);
        if (*port) {
-               ep  = port_to_endpoint(*port);
+               ep  = of_graph_get_next_port_endpoint(*port, NULL);
                rep = of_graph_get_remote_endpoint(ep);
        }
 
@@ -530,67 +523,70 @@ static int graph_parse_node_multi_nm(struct 
snd_soc_dai_link *dai_link,
         *      };
         * };
         */
-       struct device_node *mcpu_ep             = port_to_endpoint(mcpu_port);
-       struct device_node *mcpu_ep_n           = mcpu_ep;
-       struct device_node *mcpu_port_top       = 
of_get_next_child(port_to_ports(mcpu_port), NULL);
-       struct device_node *mcpu_ep_top         = 
port_to_endpoint(mcpu_port_top);
+       struct device_node *mcpu_ep_n;
+       struct device_node *mcpu_ep             = 
of_graph_get_next_port_endpoint(mcpu_port, NULL);
+       struct device_node *mcpu_ports          = port_to_ports(mcpu_port);
+       struct device_node *mcpu_port_top       = 
of_graph_get_next_port(mcpu_ports, NULL);
+       struct device_node *mcpu_ep_top         = 
of_graph_get_next_port_endpoint(mcpu_port_top, NULL);
        struct device_node *mcodec_ep_top       = 
of_graph_get_remote_endpoint(mcpu_ep_top);
        struct device_node *mcodec_port_top     = ep_to_port(mcodec_ep_top);
        struct device_node *mcodec_ports        = 
port_to_ports(mcodec_port_top);
        int nm_max = max(dai_link->num_cpus, dai_link->num_codecs);
-       int ret = -EINVAL;
+       int ret = 0;
 
-       if (cpu_idx > dai_link->num_cpus)
+       if (cpu_idx > dai_link->num_cpus) {
+               ret = -EINVAL;
                goto mcpu_err;
+       }
 
-       while (1) {
+       for_each_of_graph_port_endpoint(mcpu_port, mcpu_ep_n) {
                struct device_node *mcodec_ep_n;
                struct device_node *mcodec_port_i;
                struct device_node *mcodec_port;
                int codec_idx;
 
-               if (*nm_idx > nm_max)
-                       break;
+               /* ignore 1st ep which is for element */
+               if (mcpu_ep_n == mcpu_ep)
+                       continue;
 
-               mcpu_ep_n = of_get_next_child(mcpu_port, mcpu_ep_n);
-               if (!mcpu_ep_n) {
-                       ret = 0;
+               if (*nm_idx > nm_max)
                        break;
-               }
 
                mcodec_ep_n     = of_graph_get_remote_endpoint(mcpu_ep_n);
                mcodec_port     = ep_to_port(mcodec_ep_n);
 
-               if (mcodec_ports != port_to_ports(mcodec_port))
+               if (mcodec_ports != port_to_ports(mcodec_port)) {
+                       ret = -EINVAL;
                        goto mcpu_err;
+               }
 
                codec_idx = 0;
-               mcodec_port_i = of_get_next_child(mcodec_ports, NULL);
-               while (1) {
-                       if (codec_idx > dai_link->num_codecs)
-                               goto mcodec_err;
-
-                       mcodec_port_i = of_get_next_child(mcodec_ports, 
mcodec_port_i);
+               ret = -EINVAL;
+               for_each_of_graph_port(mcodec_ports, mcodec_port_i) {
 
-                       if (!mcodec_port_i)
-                               goto mcodec_err;
+                       /* ignore 1st port which is for pair connection */
+                       if (mcodec_port_top == mcodec_port_i)
+                               continue;
 
-                       if (mcodec_port_i == mcodec_port)
+                       if (codec_idx > dai_link->num_codecs)
                                break;
 
+                       if (mcodec_port_i == mcodec_port) {
+                               dai_link->ch_maps[*nm_idx].cpu   = cpu_idx;
+                               dai_link->ch_maps[*nm_idx].codec = codec_idx;
+
+                               (*nm_idx)++;
+                               ret = 0;
+                               break;
+                       }
                        codec_idx++;
                }
-
-               dai_link->ch_maps[*nm_idx].cpu          = cpu_idx;
-               dai_link->ch_maps[*nm_idx].codec        = codec_idx;
-
-               (*nm_idx)++;
-
                of_node_put(mcodec_port_i);
-mcodec_err:
                of_node_put(mcodec_port);
                of_node_put(mcpu_ep_n);
                of_node_put(mcodec_ep_n);
+               if (ret < 0)
+                       break;
        }
 mcpu_err:
        of_node_put(mcpu_ep);
@@ -674,7 +670,7 @@ static int graph_parse_node_single(struct simple_util_priv 
*priv,
                                   struct device_node *port,
                                   struct link_info *li, int is_cpu)
 {
-       struct device_node *ep = port_to_endpoint(port);
+       struct device_node *ep = of_graph_get_next_port_endpoint(port, NULL);
        int ret = __graph_parse_node(priv, gtype, ep, li, is_cpu, 0);
 
        of_node_put(ep);
@@ -769,7 +765,7 @@ static void graph_link_init(struct simple_util_priv *priv,
                of_node_put(port_cpu);
                port_cpu = ep_to_port(ep_cpu);
        } else {
-               ep_cpu = port_to_endpoint(port_cpu);
+               ep_cpu = of_graph_get_next_port_endpoint(port_cpu, NULL);
        }
        ports_cpu = port_to_ports(port_cpu);
 
@@ -779,7 +775,7 @@ static void graph_link_init(struct simple_util_priv *priv,
                of_node_put(port_cpu);
                port_codec = ep_to_port(ep_codec);
        } else {
-               ep_codec = port_to_endpoint(port_codec);
+               ep_codec = of_graph_get_next_port_endpoint(port_codec, NULL);
        }
        ports_codec = port_to_ports(port_codec);
 
@@ -850,7 +846,7 @@ int audio_graph2_link_normal(struct simple_util_priv *priv,
                             struct link_info *li)
 {
        struct device_node *cpu_port = lnk;
-       struct device_node *cpu_ep = port_to_endpoint(cpu_port);
+       struct device_node *cpu_ep = of_graph_get_next_port_endpoint(cpu_port, 
NULL);
        struct device_node *codec_port = of_graph_get_remote_port(cpu_ep);
        int ret;
 
@@ -883,7 +879,7 @@ int audio_graph2_link_dpcm(struct simple_util_priv *priv,
                           struct device_node *lnk,
                           struct link_info *li)
 {
-       struct device_node *ep = port_to_endpoint(lnk);
+       struct device_node *ep = of_graph_get_next_port_endpoint(lnk, NULL);
        struct device_node *rep = of_graph_get_remote_endpoint(ep);
        struct device_node *cpu_port = NULL;
        struct device_node *codec_port = NULL;
@@ -1009,7 +1005,7 @@ int audio_graph2_link_c2c(struct simple_util_priv *priv,
        of_node_get(lnk);
        port0 = lnk;
        ports = port_to_ports(port0);
-       port1 = of_get_next_child(ports, lnk);
+       port1 = of_graph_get_next_port(ports, port0);
 
        /*
         * Card2 can use original Codec2Codec settings if DT has.
@@ -1039,8 +1035,8 @@ int audio_graph2_link_c2c(struct simple_util_priv *priv,
                dai_link->num_c2c_params        = 1;
        }
 
-       ep0 = port_to_endpoint(port0);
-       ep1 = port_to_endpoint(port1);
+       ep0 = of_graph_get_next_port_endpoint(port0, NULL);
+       ep1 = of_graph_get_next_port_endpoint(port1, NULL);
 
        codec0_port = of_graph_get_remote_port(ep0);
        codec1_port = of_graph_get_remote_port(ep1);
@@ -1141,21 +1137,12 @@ static int graph_counter(struct device_node *lnk)
         */
        if (graph_lnk_is_multi(lnk)) {
                struct device_node *ports = port_to_ports(lnk);
-               struct device_node *port = NULL;
-               int cnt = 0;
 
                /*
                 * CPU/Codec = N:M case has many endpoints.
                 * We can't use of_graph_get_endpoint_count() here
                 */
-               while(1) {
-                       port = of_get_next_child(ports, port);
-                       if (!port)
-                               break;
-                       cnt++;
-               }
-
-               return cnt - 1;
+               return of_graph_get_port_count(ports) - 1;
        }
        /*
         * Single CPU / Codec
@@ -1169,7 +1156,7 @@ static int graph_count_normal(struct simple_util_priv 
*priv,
                              struct link_info *li)
 {
        struct device_node *cpu_port = lnk;
-       struct device_node *cpu_ep = port_to_endpoint(cpu_port);
+       struct device_node *cpu_ep = of_graph_get_next_port_endpoint(cpu_port, 
NULL);
        struct device_node *codec_port = of_graph_get_remote_port(cpu_ep);
 
        /*
@@ -1197,7 +1184,7 @@ static int graph_count_dpcm(struct simple_util_priv *priv,
                            struct device_node *lnk,
                            struct link_info *li)
 {
-       struct device_node *ep = port_to_endpoint(lnk);
+       struct device_node *ep = of_graph_get_next_port_endpoint(lnk, NULL);
        struct device_node *rport = of_graph_get_remote_port(ep);
 
        /*
@@ -1239,9 +1226,9 @@ static int graph_count_c2c(struct simple_util_priv *priv,
 {
        struct device_node *ports = port_to_ports(lnk);
        struct device_node *port0 = lnk;
-       struct device_node *port1 = of_get_next_child(ports, of_node_get(lnk));
-       struct device_node *ep0 = port_to_endpoint(port0);
-       struct device_node *ep1 = port_to_endpoint(port1);
+       struct device_node *port1 = of_graph_get_next_port(ports, 
of_node_get(port0));
+       struct device_node *ep0 = of_graph_get_next_port_endpoint(port0, NULL);
+       struct device_node *ep1 = of_graph_get_next_port_endpoint(port1, NULL);
        struct device_node *codec0 = of_graph_get_remote_port(ep0);
        struct device_node *codec1 = of_graph_get_remote_port(ep1);
 
-- 
2.43.0

Reply via email to