Merge remote-tracking branch 'sound-asoc/for-next'
[linux] / sound / soc / sh / rcar / core.c
index f5219e7..022996d 100644 (file)
@@ -1031,25 +1031,19 @@ static const struct snd_soc_dai_ops rsnd_soc_dai_ops = {
        .prepare        = rsnd_soc_dai_prepare,
 };
 
-static void rsnd_parse_connect_simple(struct rsnd_priv *priv,
-                                     struct device_node *dai_np,
-                                     int dai_i, int is_play)
+static void rsnd_parse_tdm_split_mode(struct rsnd_priv *priv,
+                                     struct rsnd_dai_stream *io,
+                                     struct device_node *dai_np)
 {
        struct device *dev = rsnd_priv_to_dev(priv);
-       struct rsnd_dai *rdai = rsnd_rdai_get(priv, dai_i);
-       struct rsnd_dai_stream *io = is_play ?
-               &rdai->playback :
-               &rdai->capture;
        struct device_node *ssiu_np = rsnd_ssiu_of_node(priv);
        struct device_node *np;
+       int is_play = rsnd_io_is_play(io);
        int i, j;
 
        if (!ssiu_np)
                return;
 
-       if (!rsnd_io_to_mod_ssi(io))
-               return;
-
        /*
         * This driver assumes that it is TDM Split mode
         * if it includes ssiu node
@@ -1074,12 +1068,21 @@ static void rsnd_parse_connect_simple(struct rsnd_priv *priv,
        }
 }
 
+static void rsnd_parse_connect_simple(struct rsnd_priv *priv,
+                                     struct rsnd_dai_stream *io,
+                                     struct device_node *dai_np)
+{
+       if (!rsnd_io_to_mod_ssi(io))
+               return;
+
+       rsnd_parse_tdm_split_mode(priv, io, dai_np);
+}
+
 static void rsnd_parse_connect_graph(struct rsnd_priv *priv,
                                     struct rsnd_dai_stream *io,
                                     struct device_node *endpoint)
 {
        struct device *dev = rsnd_priv_to_dev(priv);
-       struct device_node *remote_port = of_graph_get_remote_port(endpoint);
        struct device_node *remote_node = of_graph_get_remote_port_parent(endpoint);
 
        if (!rsnd_io_to_mod_ssi(io))
@@ -1097,14 +1100,7 @@ static void rsnd_parse_connect_graph(struct rsnd_priv *priv,
                dev_dbg(dev, "%s connected to HDMI1\n", io->name);
        }
 
-       /*
-        * This driver assumes that it is TDM Split mode
-        * if remote node has multi endpoint
-        */
-       if (of_get_child_count(remote_port) > 1) {
-               rsnd_flags_set(io, RSND_STREAM_TDM_SPLIT);
-               dev_dbg(dev, "%s is part of TDM Split\n", io->name);
-       }
+       rsnd_parse_tdm_split_mode(priv, io, endpoint);
 }
 
 void rsnd_parse_connect_common(struct rsnd_dai *rdai,
@@ -1292,8 +1288,10 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
                for_each_child_of_node(dai_node, dai_np) {
                        __rsnd_dai_probe(priv, dai_np, dai_i);
                        if (rsnd_is_gen3(priv)) {
-                               rsnd_parse_connect_simple(priv, dai_np, dai_i, 1);
-                               rsnd_parse_connect_simple(priv, dai_np, dai_i, 0);
+                               struct rsnd_dai *rdai = rsnd_rdai_get(priv, dai_i);
+
+                               rsnd_parse_connect_simple(priv, &rdai->playback, dai_np);
+                               rsnd_parse_connect_simple(priv, &rdai->capture,  dai_np);
                        }
                        dai_i++;
                }