summaryrefslogtreecommitdiffstats
path: root/sound/soc/sh/rcar/core.c
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2017-05-18 01:27:48 +0000
committerMark Brown <broonie@kernel.org>2017-05-19 18:36:25 +0100
commit11d0f8ed6dc3e553b20329bc85f2a1aefb5f180f (patch)
tree1777c1a84a99b4ae681cf69f6cc8744e4e9e78e7 /sound/soc/sh/rcar/core.c
parentc73df77d72de28ad72973d3c3103a5361e1440fb (diff)
downloadop-kernel-dev-11d0f8ed6dc3e553b20329bc85f2a1aefb5f180f.zip
op-kernel-dev-11d0f8ed6dc3e553b20329bc85f2a1aefb5f180f.tar.gz
ASoC: rsnd: add support graph base DT phase 1
To enable OF-graph base DT on rsnd driver, and to keep compatible previous normal sound card style, it need to support both "rcar_sound,dai" and "ports" (or "port") on DT. This patch modify rsnd_dai_of_node() to parse "rcar_sound,dai" and "ports" (or "port") as phase 1. It can detect graph base style, but do nothing at this point. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sh/rcar/core.c')
-rw-r--r--sound/soc/sh/rcar/core.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c
index 3c47af1..72a3139 100644
--- a/sound/soc/sh/rcar/core.c
+++ b/sound/soc/sh/rcar/core.c
@@ -774,6 +774,42 @@ void rsnd_parse_connect_common(struct rsnd_dai *rdai,
of_node_put(node);
}
+static struct device_node *rsnd_dai_of_node(struct rsnd_priv *priv,
+ int *is_graph)
+{
+ struct device *dev = rsnd_priv_to_dev(priv);
+ struct device_node *np = dev->of_node;
+ struct device_node *dai_node;
+ struct device_node *ret;
+
+ *is_graph = 0;
+
+ /*
+ * parse both previous dai (= rcar_sound,dai), and
+ * graph dai (= ports/port)
+ */
+ dai_node = of_get_child_by_name(np, RSND_NODE_DAI);
+ if (dai_node) {
+ ret = dai_node;
+ goto of_node_compatible;
+ }
+
+ ret = np;
+
+ dai_node = of_graph_get_next_endpoint(np, NULL);
+ if (dai_node)
+ goto of_node_graph;
+
+ return NULL;
+
+of_node_graph:
+ *is_graph = 1;
+of_node_compatible:
+ of_node_put(dai_node);
+
+ return ret;
+}
+
static int rsnd_dai_probe(struct rsnd_priv *priv)
{
struct device_node *dai_node;
@@ -785,9 +821,10 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
struct rsnd_dai *rdai;
struct device *dev = rsnd_priv_to_dev(priv);
int nr, dai_i, io_i;
+ int is_graph;
int ret;
- dai_node = rsnd_dai_of_node(priv);
+ dai_node = rsnd_dai_of_node(priv, &is_graph);
nr = of_get_child_count(dai_node);
if (!nr) {
ret = -EINVAL;
OpenPOWER on IntegriCloud