ASoC: rsnd: add rsnd_parse_connect_common() and remove complex macro
Current rsnd driver is using complex macro to parse DAI connection. This patch adds new rsnd_parse_connect_common() and replace current macro to it. This is prepare for multi channel support Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
750fd445ac
commit
89b66174ec
|
@ -609,17 +609,44 @@ static const struct snd_soc_dai_ops rsnd_soc_dai_ops = {
|
|||
.set_tdm_slot = rsnd_soc_set_dai_tdm_slot,
|
||||
};
|
||||
|
||||
void rsnd_parse_connect_common(struct rsnd_dai *rdai,
|
||||
struct rsnd_mod* (*mod_get)(struct rsnd_priv *priv, int id),
|
||||
struct device_node *node,
|
||||
struct device_node *playback,
|
||||
struct device_node *capture)
|
||||
{
|
||||
struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
|
||||
struct device_node *np;
|
||||
struct rsnd_mod *mod;
|
||||
int i;
|
||||
|
||||
if (!node)
|
||||
return;
|
||||
|
||||
i = 0;
|
||||
for_each_child_of_node(node, np) {
|
||||
mod = mod_get(priv, i);
|
||||
if (np == playback)
|
||||
rsnd_dai_connect(mod, &rdai->playback, mod->type);
|
||||
if (np == capture)
|
||||
rsnd_dai_connect(mod, &rdai->capture, mod->type);
|
||||
i++;
|
||||
}
|
||||
|
||||
of_node_put(node);
|
||||
}
|
||||
|
||||
static int rsnd_dai_probe(struct rsnd_priv *priv)
|
||||
{
|
||||
struct device_node *dai_node;
|
||||
struct device_node *dai_np, *np, *node;
|
||||
struct device_node *dai_np;
|
||||
struct device_node *playback, *capture;
|
||||
struct rsnd_dai_stream *io_playback;
|
||||
struct rsnd_dai_stream *io_capture;
|
||||
struct snd_soc_dai_driver *rdrv, *drv;
|
||||
struct rsnd_dai *rdai;
|
||||
struct device *dev = rsnd_priv_to_dev(priv);
|
||||
int nr, dai_i, io_i, np_i;
|
||||
int nr, dai_i, io_i;
|
||||
int ret;
|
||||
|
||||
dai_node = rsnd_dai_of_node(priv);
|
||||
|
@ -676,22 +703,6 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
|
|||
rdai->capture.rdai = rdai;
|
||||
rsnd_set_slot(rdai, 2, 1); /* default */
|
||||
|
||||
#define mod_parse(name) \
|
||||
node = rsnd_##name##_of_node(priv); \
|
||||
if (node) { \
|
||||
struct rsnd_mod *mod; \
|
||||
np_i = 0; \
|
||||
for_each_child_of_node(node, np) { \
|
||||
mod = rsnd_##name##_mod_get(priv, np_i); \
|
||||
if (np == playback) \
|
||||
rsnd_dai_connect(mod, io_playback, mod->type); \
|
||||
if (np == capture) \
|
||||
rsnd_dai_connect(mod, io_capture, mod->type); \
|
||||
np_i++; \
|
||||
} \
|
||||
of_node_put(node); \
|
||||
}
|
||||
|
||||
for (io_i = 0;; io_i++) {
|
||||
playback = of_parse_phandle(dai_np, "playback", io_i);
|
||||
capture = of_parse_phandle(dai_np, "capture", io_i);
|
||||
|
@ -699,11 +710,11 @@ if (node) { \
|
|||
if (!playback && !capture)
|
||||
break;
|
||||
|
||||
mod_parse(ssi);
|
||||
mod_parse(src);
|
||||
mod_parse(ctu);
|
||||
mod_parse(mix);
|
||||
mod_parse(dvc);
|
||||
rsnd_parse_connect_ssi(rdai, playback, capture);
|
||||
rsnd_parse_connect_src(rdai, playback, capture);
|
||||
rsnd_parse_connect_ctu(rdai, playback, capture);
|
||||
rsnd_parse_connect_mix(rdai, playback, capture);
|
||||
rsnd_parse_connect_dvc(rdai, playback, capture);
|
||||
|
||||
of_node_put(playback);
|
||||
of_node_put(capture);
|
||||
|
|
|
@ -292,6 +292,11 @@ struct dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io,
|
|||
void rsnd_mod_interrupt(struct rsnd_mod *mod,
|
||||
void (*callback)(struct rsnd_mod *mod,
|
||||
struct rsnd_dai_stream *io));
|
||||
void rsnd_parse_connect_common(struct rsnd_dai *rdai,
|
||||
struct rsnd_mod* (*mod_get)(struct rsnd_priv *priv, int id),
|
||||
struct device_node *node,
|
||||
struct device_node *playback,
|
||||
struct device_node *capture);
|
||||
|
||||
void rsnd_set_slot(struct rsnd_dai *rdai,
|
||||
int slots, int slots_total);
|
||||
|
@ -544,6 +549,10 @@ int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod);
|
|||
|
||||
#define rsnd_ssi_of_node(priv) \
|
||||
of_get_child_by_name(rsnd_priv_to_dev(priv)->of_node, "rcar_sound,ssi")
|
||||
#define rsnd_parse_connect_ssi(rdai, playback, capture) \
|
||||
rsnd_parse_connect_common(rdai, rsnd_ssi_mod_get, \
|
||||
rsnd_ssi_of_node(rsnd_rdai_to_priv(rdai)), \
|
||||
playback, capture)
|
||||
|
||||
/*
|
||||
* R-Car SSIU
|
||||
|
@ -564,6 +573,10 @@ unsigned int rsnd_src_get_ssi_rate(struct rsnd_priv *priv,
|
|||
struct snd_pcm_runtime *runtime);
|
||||
#define rsnd_src_of_node(priv) \
|
||||
of_get_child_by_name(rsnd_priv_to_dev(priv)->of_node, "rcar_sound,src")
|
||||
#define rsnd_parse_connect_src(rdai, playback, capture) \
|
||||
rsnd_parse_connect_common(rdai, rsnd_src_mod_get, \
|
||||
rsnd_src_of_node(rsnd_rdai_to_priv(rdai)), \
|
||||
playback, capture)
|
||||
|
||||
/*
|
||||
* R-Car CTU
|
||||
|
@ -573,6 +586,10 @@ void rsnd_ctu_remove(struct rsnd_priv *priv);
|
|||
struct rsnd_mod *rsnd_ctu_mod_get(struct rsnd_priv *priv, int id);
|
||||
#define rsnd_ctu_of_node(priv) \
|
||||
of_get_child_by_name(rsnd_priv_to_dev(priv)->of_node, "rcar_sound,ctu")
|
||||
#define rsnd_parse_connect_ctu(rdai, playback, capture) \
|
||||
rsnd_parse_connect_common(rdai, rsnd_ctu_mod_get, \
|
||||
rsnd_ctu_of_node(rsnd_rdai_to_priv(rdai)), \
|
||||
playback, capture)
|
||||
|
||||
/*
|
||||
* R-Car MIX
|
||||
|
@ -582,6 +599,10 @@ void rsnd_mix_remove(struct rsnd_priv *priv);
|
|||
struct rsnd_mod *rsnd_mix_mod_get(struct rsnd_priv *priv, int id);
|
||||
#define rsnd_mix_of_node(priv) \
|
||||
of_get_child_by_name(rsnd_priv_to_dev(priv)->of_node, "rcar_sound,mix")
|
||||
#define rsnd_parse_connect_mix(rdai, playback, capture) \
|
||||
rsnd_parse_connect_common(rdai, rsnd_mix_mod_get, \
|
||||
rsnd_mix_of_node(rsnd_rdai_to_priv(rdai)), \
|
||||
playback, capture)
|
||||
|
||||
/*
|
||||
* R-Car DVC
|
||||
|
@ -591,6 +612,10 @@ void rsnd_dvc_remove(struct rsnd_priv *priv);
|
|||
struct rsnd_mod *rsnd_dvc_mod_get(struct rsnd_priv *priv, int id);
|
||||
#define rsnd_dvc_of_node(priv) \
|
||||
of_get_child_by_name(rsnd_priv_to_dev(priv)->of_node, "rcar_sound,dvc")
|
||||
#define rsnd_parse_connect_dvc(rdai, playback, capture) \
|
||||
rsnd_parse_connect_common(rdai, rsnd_dvc_mod_get, \
|
||||
rsnd_dvc_of_node(rsnd_rdai_to_priv(rdai)), \
|
||||
playback, capture)
|
||||
|
||||
/*
|
||||
* R-Car CMD
|
||||
|
|
Loading…
Reference in a new issue