| From fd65e0a967c01325c5cf07f5879ce581d1581880 Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Thu, 8 May 2014 17:43:26 -0700 |
| Subject: ASoC: rsnd: add rsnd_path_parse() macro |
| |
| Current R-Car sound supports only SRC/SSI, |
| but, other module will be supported. |
| This patch adds rsnd_path_parse() macro to share code |
| |
| Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit 739f9502fdd7c7202123ded842415a0392b7dc40) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| sound/soc/sh/rcar/core.c | 43 ++++++++++++++++++++++--------------------- |
| 1 file changed, 22 insertions(+), 21 deletions(-) |
| |
| diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c |
| index a2ae46f83038..8bc3ef2503b5 100644 |
| --- a/sound/soc/sh/rcar/core.c |
| +++ b/sound/soc/sh/rcar/core.c |
| @@ -575,14 +575,27 @@ static const struct snd_soc_dai_ops rsnd_soc_dai_ops = { |
| .set_fmt = rsnd_soc_dai_set_fmt, |
| }; |
| |
| +#define rsnd_path_parse(priv, io, type) \ |
| +({ \ |
| + struct rsnd_mod *mod; \ |
| + int ret = 0; \ |
| + int id = -1; \ |
| + \ |
| + if (rsnd_is_enable_path(io, type)) { \ |
| + id = rsnd_info_id(priv, io, type); \ |
| + if (id >= 0) { \ |
| + mod = rsnd_##type##_mod_get(priv, id); \ |
| + ret = rsnd_dai_connect(mod, io); \ |
| + } \ |
| + } \ |
| + ret; \ |
| +}) |
| + |
| static int rsnd_path_init(struct rsnd_priv *priv, |
| struct rsnd_dai *rdai, |
| struct rsnd_dai_stream *io) |
| { |
| - struct rsnd_mod *mod; |
| int ret; |
| - int ssi_id = -1; |
| - int src_id = -1; |
| |
| /* |
| * Gen1 is created by SRU/SSI, and this SRU is base module of |
| @@ -594,28 +607,16 @@ static int rsnd_path_init(struct rsnd_priv *priv, |
| * Gen2 SCU path is very flexible, but, Gen1 SRU (SCU parts) is |
| * using fixed path. |
| */ |
| - if (rsnd_is_enable_path(io, ssi)) |
| - ssi_id = rsnd_info_id(priv, io, ssi); |
| - if (rsnd_is_enable_path(io, src)) |
| - src_id = rsnd_info_id(priv, io, src); |
| - |
| - ret = 0; |
| |
| /* SRC */ |
| - if (src_id >= 0) { |
| - mod = rsnd_src_mod_get(priv, src_id); |
| - ret = rsnd_dai_connect(mod, io); |
| - if (ret < 0) |
| - return ret; |
| - } |
| + ret = rsnd_path_parse(priv, io, src); |
| + if (ret < 0) |
| + return ret; |
| |
| /* SSI */ |
| - if (ssi_id >= 0) { |
| - mod = rsnd_ssi_mod_get(priv, ssi_id); |
| - ret = rsnd_dai_connect(mod, io); |
| - if (ret < 0) |
| - return ret; |
| - } |
| + ret = rsnd_path_parse(priv, io, ssi); |
| + if (ret < 0) |
| + return ret; |
| |
| return ret; |
| } |
| -- |
| 2.1.2 |
| |