ASoC: rsnd: rsnd_mod has rsnd_priv
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 15 Jun 2015 06:24:54 +0000 (06:24 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 16 Jun 2015 11:34:03 +0000 (12:34 +0100)
Each Renesas sound mod (= SSI/SRC/DVC) might be called from many paths
if it supports MIXer. In such case, mod <-> io is no longer 1:1
relationship. This means we can't use rsnd_mod_to_io() in SSI/SRC/DMA
interrupt handler. In such case, we need to check all io in interrupt
handler, and then, "priv" is needed.
This patch adds rsnd_priv pointer in rsnd_mod for prepare it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: Keita Kobayashi <keita.kobayashi.ym@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/core.c
sound/soc/sh/rcar/dvc.c
sound/soc/sh/rcar/rsnd.h
sound/soc/sh/rcar/src.c
sound/soc/sh/rcar/ssi.c

index 50ec28c24867c7ef3be387845682d41ba45b70f7..1e8d7e59998c0fdbfd957be0ebf401630218a45d 100644 (file)
@@ -145,7 +145,8 @@ struct dma_chan *rsnd_mod_dma_req(struct rsnd_mod *mod)
        return mod->ops->dma_req(mod);
 }
 
-int rsnd_mod_init(struct rsnd_mod *mod,
+int rsnd_mod_init(struct rsnd_priv *priv,
+                 struct rsnd_mod *mod,
                   struct rsnd_mod_ops *ops,
                   struct clk *clk,
                   enum rsnd_mod_type type,
@@ -160,6 +161,7 @@ int rsnd_mod_init(struct rsnd_mod *mod,
        mod->ops        = ops;
        mod->type       = type;
        mod->clk        = clk;
+       mod->priv       = priv;
 
        return ret;
 }
index e5fcb062ad77239bad2ef195037f8c9969edf119..2004bd00786be9555d8343d233d8083cdddf0ba7 100644 (file)
@@ -366,7 +366,7 @@ int rsnd_dvc_probe(struct platform_device *pdev,
 
                dvc->info = &info->dvc_info[i];
 
-               ret = rsnd_mod_init(&dvc->mod, &rsnd_dvc_ops,
+               ret = rsnd_mod_init(priv, &dvc->mod, &rsnd_dvc_ops,
                              clk, RSND_MOD_DVC, i);
                if (ret)
                        return ret;
index 8a114cb41925d2da0c2bef21c2f57ba3f879bd52..4561b97d88349a612968c8d1aa6ae80bb99cacbf 100644 (file)
@@ -253,6 +253,7 @@ struct rsnd_mod {
        struct rsnd_mod_ops *ops;
        struct rsnd_dma dma;
        struct rsnd_dai_stream *io;
+       struct rsnd_priv *priv;
        struct clk *clk;
        u32 status;
 };
@@ -300,14 +301,15 @@ struct rsnd_mod {
 #define __rsnd_mod_call_fallback       0
 #define __rsnd_mod_call_hw_params      0
 
-#define rsnd_mod_to_priv(mod) (rsnd_io_to_priv(rsnd_mod_to_io(mod)))
+#define rsnd_mod_to_priv(mod) ((mod)->priv)
 #define rsnd_mod_to_dma(mod) (&(mod)->dma)
 #define rsnd_mod_to_io(mod) ((mod)->io)
 #define rsnd_mod_id(mod) ((mod)->id)
 #define rsnd_mod_hw_start(mod) clk_enable((mod)->clk)
 #define rsnd_mod_hw_stop(mod)  clk_disable((mod)->clk)
 
-int rsnd_mod_init(struct rsnd_mod *mod,
+int rsnd_mod_init(struct rsnd_priv *priv,
+                 struct rsnd_mod *mod,
                   struct rsnd_mod_ops *ops,
                   struct clk *clk,
                   enum rsnd_mod_type type,
index fbe9166e26d1b8647452db9de117fa247f1f7baa..316d139b7176e730092fe3130fb977b498c12239 100644 (file)
@@ -1046,7 +1046,7 @@ int rsnd_src_probe(struct platform_device *pdev,
 
                src->info = &info->src_info[i];
 
-               ret = rsnd_mod_init(&src->mod, ops, clk, RSND_MOD_SRC, i);
+               ret = rsnd_mod_init(priv, &src->mod, ops, clk, RSND_MOD_SRC, i);
                if (ret)
                        return ret;
        }
index 25483211a349f86ec0093aa16988577836a5c125..16ced762aa0c504ef175f648ed8eaccf01229ac4 100644 (file)
@@ -782,7 +782,7 @@ int rsnd_ssi_probe(struct platform_device *pdev,
                else if (rsnd_ssi_pio_available(ssi))
                        ops = &rsnd_ssi_pio_ops;
 
-               ret = rsnd_mod_init(&ssi->mod, ops, clk, RSND_MOD_SSI, i);
+               ret = rsnd_mod_init(priv, &ssi->mod, ops, clk, RSND_MOD_SSI, i);
                if (ret)
                        return ret;