Commit 11d0f8ed authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

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: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c73df77d
...@@ -774,6 +774,42 @@ void rsnd_parse_connect_common(struct rsnd_dai *rdai, ...@@ -774,6 +774,42 @@ void rsnd_parse_connect_common(struct rsnd_dai *rdai,
of_node_put(node); 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) static int rsnd_dai_probe(struct rsnd_priv *priv)
{ {
struct device_node *dai_node; struct device_node *dai_node;
...@@ -785,9 +821,10 @@ static int rsnd_dai_probe(struct rsnd_priv *priv) ...@@ -785,9 +821,10 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
struct rsnd_dai *rdai; struct rsnd_dai *rdai;
struct device *dev = rsnd_priv_to_dev(priv); struct device *dev = rsnd_priv_to_dev(priv);
int nr, dai_i, io_i; int nr, dai_i, io_i;
int is_graph;
int ret; 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); nr = of_get_child_count(dai_node);
if (!nr) { if (!nr) {
ret = -EINVAL; ret = -EINVAL;
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of_device.h> #include <linux/of_device.h>
#include <linux/of_graph.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/sh_dma.h> #include <linux/sh_dma.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
...@@ -475,7 +476,6 @@ int rsnd_dai_pointer_offset(struct rsnd_dai_stream *io, int additional); ...@@ -475,7 +476,6 @@ int rsnd_dai_pointer_offset(struct rsnd_dai_stream *io, int additional);
int rsnd_dai_connect(struct rsnd_mod *mod, int rsnd_dai_connect(struct rsnd_mod *mod,
struct rsnd_dai_stream *io, struct rsnd_dai_stream *io,
enum rsnd_mod_type type); enum rsnd_mod_type type);
#define rsnd_dai_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_DAI)
/* /*
* R-Car Gen1/Gen2 * R-Car Gen1/Gen2
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment