ASoC: rsnd: rsnd_ssi_is_multi_slave() macro uses rsnd_ssi_multi_slaves()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tue, 9 Feb 2016 07:04:09 +0000 (07:04 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 9 Feb 2016 16:17:32 +0000 (16:17 +0000)
b4c83b171 ("ASoC: rsnd: add Multi channel support") added
Multi channel support, and current rsnd_ssi_is_multi_slave()'s check
method is !SSI equals SSIM1/2/3. But, SSI parent also hit to this macro.
Because of this reason, some stream which needs SSI parent clock
can't work correctly. This patch uses rsnd_ssi_multi_slaves() to
solve this issue. This issue was reported by Dung.

Reported-by: Nguyen Viet Dung <nv-dung@jinso.co.jp>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/ssi.c

index 803e9ae659151cbf47f9e7e19a8e4aed1023a5ba..592505a4bc136967585f1e7d9e1674633028a42c 100644 (file)
@@ -94,7 +94,8 @@ struct rsnd_ssi {
 #define rsnd_mod_to_ssi(_mod) container_of((_mod), struct rsnd_ssi, mod)
 #define rsnd_ssi_mode_flags(p) ((p)->flags)
 #define rsnd_ssi_is_parent(ssi, io) ((ssi) == rsnd_io_to_mod_ssip(io))
-#define rsnd_ssi_is_multi_slave(ssi, io) ((mod) != rsnd_io_to_mod_ssi(io))
+#define rsnd_ssi_is_multi_slave(mod, io) \
+       (rsnd_ssi_multi_slaves(io) & (1 << rsnd_mod_id(mod)))
 
 int rsnd_ssi_use_busif(struct rsnd_dai_stream *io)
 {
@@ -167,9 +168,6 @@ static int rsnd_ssi_irq(struct rsnd_mod *mod,
 u32 rsnd_ssi_multi_slaves(struct rsnd_dai_stream *io)
 {
        struct rsnd_mod *mod;
-       struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
-       struct rsnd_priv *priv = rsnd_io_to_priv(io);
-       struct device *dev = rsnd_priv_to_dev(priv);
        enum rsnd_mod_type types[] = {
                RSND_MOD_SSIM1,
                RSND_MOD_SSIM2,
@@ -177,16 +175,6 @@ u32 rsnd_ssi_multi_slaves(struct rsnd_dai_stream *io)
        };
        int i, mask;
 
-       switch (runtime->channels) {
-       case 2: /* Multi channel is not needed for Stereo */
-               return 0;
-       case 6:
-               break;
-       default:
-               dev_err(dev, "unsupported channel\n");
-               return 0;
-       }
-
        mask = 0;
        for (i = 0; i < ARRAY_SIZE(types); i++) {
                mod = rsnd_io_to_mod(io, types[i]);