ASoC: rsnd: add missing TDM Split mode support for simple-card

commit f69f452243 ("ASoC: rsnd: add TDM Split mode support")
added TDM Split mode support for rsnd driver.
But, it cares audio-graph-card style only. We can't use TDM Split
mode on simple-card style now.
This patch fixup this issue.

Fixes: f69f452243 ("ASoC: rsnd: add TDM Split mode support")
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Kuninori Morimoto 2018-12-04 08:02:43 +00:00 committed by Mark Brown
parent 665c1ade11
commit 538a4ffea3
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -1031,6 +1031,49 @@ static const struct snd_soc_dai_ops rsnd_soc_dai_ops = {
.prepare = rsnd_soc_dai_prepare, .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)
{
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 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
*/
for (i = 0;; i++) {
struct device_node *node = is_play ?
of_parse_phandle(dai_np, "playback", i) :
of_parse_phandle(dai_np, "capture", i);
if (!node)
break;
j = 0;
for_each_child_of_node(ssiu_np, np) {
if (np == node) {
rsnd_flags_set(io, RSND_STREAM_TDM_SPLIT);
dev_dbg(dev, "%s is part of TDM Split\n", io->name);
}
j++;
}
}
}
static void rsnd_parse_connect_graph(struct rsnd_priv *priv, static void rsnd_parse_connect_graph(struct rsnd_priv *priv,
struct rsnd_dai_stream *io, struct rsnd_dai_stream *io,
struct device_node *endpoint) struct device_node *endpoint)
@ -1246,8 +1289,14 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
dai_i++; dai_i++;
} }
} else { } else {
for_each_child_of_node(dai_node, dai_np) for_each_child_of_node(dai_node, dai_np) {
__rsnd_dai_probe(priv, dai_np, dai_i++); __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);
}
dai_i++;
}
} }
return 0; return 0;