ASoC: rsnd: fixup rsnd_dma_of_path method for mod base common method
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 26 Oct 2015 08:40:19 +0000 (08:40 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 16 Nov 2015 10:09:29 +0000 (10:09 +0000)
Renesas sound needs many devices
(SSI/SSIU/SRC/CTU/MIX/DVC/CMD/AudioDMAC/AudioDMACpp).
SSI/SRC/CTU/MIX/DVC are implemented as module.
SSI parent, SSIU are implemented as part of SSI
CMD is implemented as part of CTU/MIX/DVC
AudioDMAC/AudioDMACpp are implemented as part of SSI/SRC
It is nice sense that these all devices are implemented as mod.

Current rsnd_dma_of_path is assuming that all mods are related to DMA.
But it will be wrong. This patch tidyup this wrong assumption

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/dma.c

index 705e524b0892e86a6b887d8a255f7808f6e62c33..697f8825215f74bcbb147da414fb66f017fcf7ec 100644 (file)
@@ -533,7 +533,7 @@ static void rsnd_dma_of_path(struct rsnd_dma *dma,
        struct rsnd_mod *mod_start, *mod_end;
        struct rsnd_priv *priv = rsnd_mod_to_priv(this);
        struct device *dev = rsnd_priv_to_dev(priv);
-       int nr, i;
+       int nr, i, idx;
 
        if (!ssi)
                return;
@@ -562,23 +562,24 @@ static void rsnd_dma_of_path(struct rsnd_dma *dma,
        mod_start       = (is_play) ? NULL : ssi;
        mod_end         = (is_play) ? ssi  : NULL;
 
-       mod[0] = mod_start;
+       idx = 0;
+       mod[idx++] = mod_start;
        for (i = 1; i < nr; i++) {
                if (src) {
-                       mod[i] = src;
+                       mod[idx++] = src;
                        src = NULL;
                } else if (ctu) {
-                       mod[i] = ctu;
+                       mod[idx++] = ctu;
                        ctu = NULL;
                } else if (mix) {
-                       mod[i] = mix;
+                       mod[idx++] = mix;
                        mix = NULL;
                } else if (dvc) {
-                       mod[i] = dvc;
+                       mod[idx++] = dvc;
                        dvc = NULL;
                }
        }
-       mod[i] = mod_end;
+       mod[idx] = mod_end;
 
        /*
         *              | SSI | SRC |
@@ -587,8 +588,8 @@ static void rsnd_dma_of_path(struct rsnd_dma *dma,
         * !is_play     |  *  |  o  |
         */
        if ((this == ssi) == (is_play)) {
-               *mod_from       = mod[nr - 1];
-               *mod_to         = mod[nr];
+               *mod_from       = mod[idx - 1];
+               *mod_to         = mod[idx];
        } else {
                *mod_from       = mod[0];
                *mod_to         = mod[1];
@@ -596,7 +597,7 @@ static void rsnd_dma_of_path(struct rsnd_dma *dma,
 
        dev_dbg(dev, "module connection (this is %s[%d])\n",
                rsnd_mod_name(this), rsnd_mod_id(this));
-       for (i = 0; i <= nr; i++) {
+       for (i = 0; i <= idx; i++) {
                dev_dbg(dev, "  %s[%d]%s\n",
                       rsnd_mod_name(mod[i]), rsnd_mod_id(mod[i]),
                       (mod[i] == *mod_from) ? " from" :