]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ASoC: rsnd: move rsnd_gen_dma_addr() from gen.c to dma.c
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 20 Feb 2015 10:26:29 +0000 (10:26 +0000)
committerMark Brown <broonie@kernel.org>
Sat, 7 Mar 2015 15:04:29 +0000 (15:04 +0000)
Now, we have dma.c for Audio DMAC / Audio DMAC peri peri.
rsnd_gen_dma_addr() should go there.

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

index 37acd409e88cf25c42402a29f69642cc6e624909..188b4634939c1add26b28ae5f77f4e19a08602a0 100644 (file)
@@ -32,7 +32,6 @@ static void rsnd_dma_complete(void *data)
 }
 
 #define DMA_NAME_SIZE 16
-#define MOD_MAX 4 /* MEM/SSI/SRC/DVC */
 static int _rsnd_dma_of_name(char *dma_name, struct rsnd_mod *mod)
 {
        if (mod)
@@ -97,6 +96,10 @@ static void rsnd_dma_of_path(struct rsnd_dma *dma,
                             struct rsnd_mod **mod_from,
                             struct rsnd_mod **mod_to);
 
+static dma_addr_t rsnd_dma_addr(struct rsnd_priv *priv,
+                               struct rsnd_mod *mod,
+                               int is_play, int is_from);
+
 int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma, int id)
 {
        struct device *dev = rsnd_priv_to_dev(priv);
@@ -122,8 +125,8 @@ int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma, int id)
        rsnd_dma_of_name(mod_from, mod_to, dma_name);
 
        cfg.direction   = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
-       cfg.src_addr    = rsnd_gen_dma_addr(priv, mod_from, is_play, 1);
-       cfg.dst_addr    = rsnd_gen_dma_addr(priv, mod_to,   is_play, 0);
+       cfg.src_addr    = rsnd_dma_addr(priv, mod_from, is_play, 1);
+       cfg.dst_addr    = rsnd_dma_addr(priv, mod_to,   is_play, 0);
        cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
        cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
 
@@ -168,6 +171,117 @@ void rsnd_dma_quit(struct rsnd_dma *dma)
        dma->chan = NULL;
 }
 
+/*
+ *     DMA read/write register offset
+ *
+ *     RSND_xxx_I_N    for Audio DMAC input
+ *     RSND_xxx_O_N    for Audio DMAC output
+ *     RSND_xxx_I_P    for Audio DMAC peri peri input
+ *     RSND_xxx_O_P    for Audio DMAC peri peri output
+ *
+ *     ex) R-Car H2 case
+ *           mod        / DMAC in    / DMAC out   / DMAC PP in / DMAC pp out
+ *     SSI : 0xec541000 / 0xec241008 / 0xec24100c
+ *     SSIU: 0xec541000 / 0xec100000 / 0xec100000 / 0xec400000 / 0xec400000
+ *     SCU : 0xec500000 / 0xec000000 / 0xec004000 / 0xec300000 / 0xec304000
+ *     CMD : 0xec500000 /            / 0xec008000                0xec308000
+ */
+#define RDMA_SSI_I_N(addr, i)  (addr ##_reg - 0x00300000 + (0x40 * i) + 0x8)
+#define RDMA_SSI_O_N(addr, i)  (addr ##_reg - 0x00300000 + (0x40 * i) + 0xc)
+
+#define RDMA_SSIU_I_N(addr, i) (addr ##_reg - 0x00441000 + (0x1000 * i))
+#define RDMA_SSIU_O_N(addr, i) (addr ##_reg - 0x00441000 + (0x1000 * i))
+
+#define RDMA_SSIU_I_P(addr, i) (addr ##_reg - 0x00141000 + (0x1000 * i))
+#define RDMA_SSIU_O_P(addr, i) (addr ##_reg - 0x00141000 + (0x1000 * i))
+
+#define RDMA_SRC_I_N(addr, i)  (addr ##_reg - 0x00500000 + (0x400 * i))
+#define RDMA_SRC_O_N(addr, i)  (addr ##_reg - 0x004fc000 + (0x400 * i))
+
+#define RDMA_SRC_I_P(addr, i)  (addr ##_reg - 0x00200000 + (0x400 * i))
+#define RDMA_SRC_O_P(addr, i)  (addr ##_reg - 0x001fc000 + (0x400 * i))
+
+#define RDMA_CMD_O_N(addr, i)  (addr ##_reg - 0x004f8000 + (0x400 * i))
+#define RDMA_CMD_O_P(addr, i)  (addr ##_reg - 0x001f8000 + (0x400 * i))
+
+static dma_addr_t
+rsnd_gen2_dma_addr(struct rsnd_priv *priv,
+                  struct rsnd_mod *mod,
+                  int is_play, int is_from)
+{
+       struct device *dev = rsnd_priv_to_dev(priv);
+       struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
+       phys_addr_t ssi_reg = rsnd_gen_get_phy_addr(priv, RSND_GEN2_SSI);
+       phys_addr_t src_reg = rsnd_gen_get_phy_addr(priv, RSND_GEN2_SCU);
+       int is_ssi = !!(rsnd_io_to_mod_ssi(io) == mod);
+       int use_src = !!rsnd_io_to_mod_src(io);
+       int use_dvc = !!rsnd_io_to_mod_dvc(io);
+       int id = rsnd_mod_id(mod);
+       struct dma_addr {
+               dma_addr_t out_addr;
+               dma_addr_t in_addr;
+       } dma_addrs[3][2][3] = {
+               /* SRC */
+               {{{ 0,                          0 },
+                 /* Capture */
+                 { RDMA_SRC_O_N(src, id),      RDMA_SRC_I_P(src, id) },
+                 { RDMA_CMD_O_N(src, id),      RDMA_SRC_I_P(src, id) } },
+                /* Playback */
+                {{ 0,                          0, },
+                 { RDMA_SRC_O_P(src, id),      RDMA_SRC_I_N(src, id) },
+                 { RDMA_CMD_O_P(src, id),      RDMA_SRC_I_N(src, id) } }
+               },
+               /* SSI */
+               /* Capture */
+               {{{ RDMA_SSI_O_N(ssi, id),      0 },
+                 { RDMA_SSIU_O_P(ssi, id),     0 },
+                 { RDMA_SSIU_O_P(ssi, id),     0 } },
+                /* Playback */
+                {{ 0,                          RDMA_SSI_I_N(ssi, id) },
+                 { 0,                          RDMA_SSIU_I_P(ssi, id) },
+                 { 0,                          RDMA_SSIU_I_P(ssi, id) } }
+               },
+               /* SSIU */
+               /* Capture */
+               {{{ RDMA_SSIU_O_N(ssi, id),     0 },
+                 { RDMA_SSIU_O_P(ssi, id),     0 },
+                 { RDMA_SSIU_O_P(ssi, id),     0 } },
+                /* Playback */
+                {{ 0,                          RDMA_SSIU_I_N(ssi, id) },
+                 { 0,                          RDMA_SSIU_I_P(ssi, id) },
+                 { 0,                          RDMA_SSIU_I_P(ssi, id) } } },
+       };
+
+       /* it shouldn't happen */
+       if (use_dvc && !use_src)
+               dev_err(dev, "DVC is selected without SRC\n");
+
+       /* use SSIU or SSI ? */
+       if (is_ssi && (0 == strcmp(rsnd_mod_dma_name(mod), "ssiu")))
+               is_ssi++;
+
+       return (is_from) ?
+               dma_addrs[is_ssi][is_play][use_src + use_dvc].out_addr :
+               dma_addrs[is_ssi][is_play][use_src + use_dvc].in_addr;
+}
+
+static dma_addr_t rsnd_dma_addr(struct rsnd_priv *priv,
+                               struct rsnd_mod *mod,
+                               int is_play, int is_from)
+{
+       /*
+        * gen1 uses default DMA addr
+        */
+       if (rsnd_is_gen1(priv))
+               return 0;
+
+       if (!mod)
+               return 0;
+
+       return rsnd_gen2_dma_addr(priv, mod, is_play, is_from);
+}
+
+#define MOD_MAX 4 /* MEM/SSI/SRC/DVC */
 static void rsnd_dma_of_path(struct rsnd_dma *dma,
                             int is_play,
                             struct rsnd_mod **mod_from,
index 0da04ed3aabe1151d0b9e0836142cbb9c0102072..0273724a2668853c741e55291dfc83d4c9999232 100644 (file)
@@ -187,116 +187,6 @@ static int _rsnd_gen_regmap_init(struct rsnd_priv *priv,
        return 0;
 }
 
-/*
- *     DMA read/write register offset
- *
- *     RSND_xxx_I_N    for Audio DMAC input
- *     RSND_xxx_O_N    for Audio DMAC output
- *     RSND_xxx_I_P    for Audio DMAC peri peri input
- *     RSND_xxx_O_P    for Audio DMAC peri peri output
- *
- *     ex) R-Car H2 case
- *           mod        / DMAC in    / DMAC out   / DMAC PP in / DMAC pp out
- *     SSI : 0xec541000 / 0xec241008 / 0xec24100c
- *     SSIU: 0xec541000 / 0xec100000 / 0xec100000 / 0xec400000 / 0xec400000
- *     SCU : 0xec500000 / 0xec000000 / 0xec004000 / 0xec300000 / 0xec304000
- *     CMD : 0xec500000 /            / 0xec008000                0xec308000
- */
-#define RDMA_SSI_I_N(addr, i)  (addr ##_reg - 0x00300000 + (0x40 * i) + 0x8)
-#define RDMA_SSI_O_N(addr, i)  (addr ##_reg - 0x00300000 + (0x40 * i) + 0xc)
-
-#define RDMA_SSIU_I_N(addr, i) (addr ##_reg - 0x00441000 + (0x1000 * i))
-#define RDMA_SSIU_O_N(addr, i) (addr ##_reg - 0x00441000 + (0x1000 * i))
-
-#define RDMA_SSIU_I_P(addr, i) (addr ##_reg - 0x00141000 + (0x1000 * i))
-#define RDMA_SSIU_O_P(addr, i) (addr ##_reg - 0x00141000 + (0x1000 * i))
-
-#define RDMA_SRC_I_N(addr, i)  (addr ##_reg - 0x00500000 + (0x400 * i))
-#define RDMA_SRC_O_N(addr, i)  (addr ##_reg - 0x004fc000 + (0x400 * i))
-
-#define RDMA_SRC_I_P(addr, i)  (addr ##_reg - 0x00200000 + (0x400 * i))
-#define RDMA_SRC_O_P(addr, i)  (addr ##_reg - 0x001fc000 + (0x400 * i))
-
-#define RDMA_CMD_O_N(addr, i)  (addr ##_reg - 0x004f8000 + (0x400 * i))
-#define RDMA_CMD_O_P(addr, i)  (addr ##_reg - 0x001f8000 + (0x400 * i))
-
-static dma_addr_t
-rsnd_gen2_dma_addr(struct rsnd_priv *priv,
-                  struct rsnd_mod *mod,
-                  int is_play, int is_from)
-{
-       struct device *dev = rsnd_priv_to_dev(priv);
-       struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
-       phys_addr_t ssi_reg = rsnd_gen_get_phy_addr(priv, RSND_GEN2_SSI);
-       phys_addr_t src_reg = rsnd_gen_get_phy_addr(priv, RSND_GEN2_SCU);
-       int is_ssi = !!(rsnd_io_to_mod_ssi(io) == mod);
-       int use_src = !!rsnd_io_to_mod_src(io);
-       int use_dvc = !!rsnd_io_to_mod_dvc(io);
-       int id = rsnd_mod_id(mod);
-       struct dma_addr {
-               dma_addr_t out_addr;
-               dma_addr_t in_addr;
-       } dma_addrs[3][2][3] = {
-               /* SRC */
-               {{{ 0,                          0 },
-               /* Capture */
-                 { RDMA_SRC_O_N(src, id),      RDMA_SRC_I_P(src, id) },
-                 { RDMA_CMD_O_N(src, id),      RDMA_SRC_I_P(src, id) } },
-                /* Playback */
-                {{ 0,                          0, },
-                 { RDMA_SRC_O_P(src, id),      RDMA_SRC_I_N(src, id) },
-                 { RDMA_CMD_O_P(src, id),      RDMA_SRC_I_N(src, id) } }
-               },
-               /* SSI */
-               /* Capture */
-               {{{ RDMA_SSI_O_N(ssi, id),      0 },
-                 { RDMA_SSIU_O_P(ssi, id),     0 },
-                 { RDMA_SSIU_O_P(ssi, id),     0 } },
-                /* Playback */
-                {{ 0,                          RDMA_SSI_I_N(ssi, id) },
-                 { 0,                          RDMA_SSIU_I_P(ssi, id) },
-                 { 0,                          RDMA_SSIU_I_P(ssi, id) } }
-               },
-               /* SSIU */
-               /* Capture */
-               {{{ RDMA_SSIU_O_N(ssi, id),     0 },
-                 { RDMA_SSIU_O_P(ssi, id),     0 },
-                 { RDMA_SSIU_O_P(ssi, id),     0 } },
-                /* Playback */
-                {{ 0,                          RDMA_SSIU_I_N(ssi, id) },
-                 { 0,                          RDMA_SSIU_I_P(ssi, id) },
-                 { 0,                          RDMA_SSIU_I_P(ssi, id) } } },
-       };
-
-       /* it shouldn't happen */
-       if (use_dvc && !use_src)
-               dev_err(dev, "DVC is selected without SRC\n");
-
-       /* use SSIU or SSI ? */
-       if (is_ssi && (0 == strcmp(rsnd_mod_dma_name(mod), "ssiu")))
-               is_ssi++;
-
-       return (is_from) ?
-               dma_addrs[is_ssi][is_play][use_src + use_dvc].out_addr :
-               dma_addrs[is_ssi][is_play][use_src + use_dvc].in_addr;
-}
-
-dma_addr_t rsnd_gen_dma_addr(struct rsnd_priv *priv,
-                            struct rsnd_mod *mod,
-                            int is_play, int is_from)
-{
-       /*
-        * gen1 uses default DMA addr
-        */
-       if (rsnd_is_gen1(priv))
-               return 0;
-
-       if (!mod)
-               return 0;
-
-       return rsnd_gen2_dma_addr(priv, mod, is_play, is_from);
-}
-
 /*
  *             Gen2
  */
index 8a8a4d5d55efafe9b7ee90d5c2ec2ea5658f6bd0..a73e94c1d78523be2466b7202371b5b35be29256 100644 (file)
@@ -328,9 +328,6 @@ int rsnd_gen_probe(struct platform_device *pdev,
 void __iomem *rsnd_gen_reg_get(struct rsnd_priv *priv,
                               struct rsnd_mod *mod,
                               enum rsnd_reg reg);
-dma_addr_t rsnd_gen_dma_addr(struct rsnd_priv *priv,
-                      struct rsnd_mod *mod,
-                      int is_play,  int is_from);
 phys_addr_t rsnd_gen_get_phy_addr(struct rsnd_priv *priv, int reg_id);
 
 #define rsnd_is_gen1(s)                (((s)->info->flags & RSND_GEN_MASK) == RSND_GEN1)