ASoC: tegra: Use common DAI DMA data struct
authorLars-Peter Clausen <lars@metafoo.de>
Wed, 3 Apr 2013 09:06:03 +0000 (11:06 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 3 Apr 2013 17:13:34 +0000 (18:13 +0100)
Use the common DAI DMA data struct for tegra, this allows us to use the common
helper function to configure the DMA slave config based on the DAI DMA data.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
Tested-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
12 files changed:
sound/soc/tegra/tegra20_ac97.c
sound/soc/tegra/tegra20_ac97.h
sound/soc/tegra/tegra20_i2s.c
sound/soc/tegra/tegra20_i2s.h
sound/soc/tegra/tegra20_spdif.c
sound/soc/tegra/tegra20_spdif.h
sound/soc/tegra/tegra30_ahub.c
sound/soc/tegra/tegra30_ahub.h
sound/soc/tegra/tegra30_i2s.c
sound/soc/tegra/tegra30_i2s.h
sound/soc/tegra/tegra_pcm.c
sound/soc/tegra/tegra_pcm.h

index 336dcdd3e8a457e4a67c113e66ea0a88155dce74..2d7b8c2719ce1c351118a38017f21eacf1858d43 100644 (file)
@@ -35,6 +35,7 @@
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
+#include <sound/dmaengine_pcm.h>
 
 #include "tegra_asoc_utils.h"
 #include "tegra20_ac97.h"
@@ -389,14 +390,14 @@ static int tegra20_ac97_platform_probe(struct platform_device *pdev)
        }
 
        ac97->capture_dma_data.addr = mem->start + TEGRA20_AC97_FIFO_RX1;
-       ac97->capture_dma_data.wrap = 4;
-       ac97->capture_dma_data.width = 32;
-       ac97->capture_dma_data.req_sel = of_dma[1];
+       ac97->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+       ac97->capture_dma_data.maxburst = 4;
+       ac97->capture_dma_data.slave_id = of_dma[1];
 
        ac97->playback_dma_data.addr = mem->start + TEGRA20_AC97_FIFO_TX1;
-       ac97->playback_dma_data.wrap = 4;
-       ac97->playback_dma_data.width = 32;
-       ac97->playback_dma_data.req_sel = of_dma[1];
+       ac97->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+       ac97->capture_dma_data.maxburst = 4;
+       ac97->capture_dma_data.slave_id = of_dma[0];
 
        ret = snd_soc_register_dais(&pdev->dev, &tegra20_ac97_dai, 1);
        if (ret) {
index dddc6828004e72ed7568e96c0438e53bb8284dae..4acb3aaba29b746ad8f238fd26a84bf8d77cb6b1 100644 (file)
@@ -85,8 +85,8 @@
 
 struct tegra20_ac97 {
        struct clk *clk_ac97;
-       struct tegra_pcm_dma_params capture_dma_data;
-       struct tegra_pcm_dma_params playback_dma_data;
+       struct snd_dmaengine_dai_dma_data capture_dma_data;
+       struct snd_dmaengine_dai_dma_data playback_dma_data;
        struct regmap *regmap;
        int reset_gpio;
        int sync_gpio;
index caa772de5a184cb021def3333323e4343343fc51..e6651e0eaeed676f1d704f280e0a7881e7f34906 100644 (file)
@@ -41,6 +41,7 @@
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
+#include <sound/dmaengine_pcm.h>
 
 #include "tegra20_i2s.h"
 
@@ -403,14 +404,14 @@ static int tegra20_i2s_platform_probe(struct platform_device *pdev)
        }
 
        i2s->capture_dma_data.addr = mem->start + TEGRA20_I2S_FIFO2;
-       i2s->capture_dma_data.wrap = 4;
-       i2s->capture_dma_data.width = 32;
-       i2s->capture_dma_data.req_sel = dma_ch;
+       i2s->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+       i2s->capture_dma_data.maxburst = 4;
+       i2s->capture_dma_data.slave_id = dma_ch;
 
        i2s->playback_dma_data.addr = mem->start + TEGRA20_I2S_FIFO1;
-       i2s->playback_dma_data.wrap = 4;
-       i2s->playback_dma_data.width = 32;
-       i2s->playback_dma_data.req_sel = dma_ch;
+       i2s->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+       i2s->playback_dma_data.maxburst = 4;
+       i2s->playback_dma_data.slave_id = dma_ch;
 
        pm_runtime_enable(&pdev->dev);
        if (!pm_runtime_enabled(&pdev->dev)) {
index 729958713cd44723f7b07c1e6815d61e5adde587..fa6c29cc12b9f679b3abadfdcffd9b2ea760b532 100644 (file)
 struct tegra20_i2s {
        struct snd_soc_dai_driver dai;
        struct clk *clk_i2s;
-       struct tegra_pcm_dma_params capture_dma_data;
-       struct tegra_pcm_dma_params playback_dma_data;
+       struct snd_dmaengine_dai_dma_data capture_dma_data;
+       struct snd_dmaengine_dai_dma_data playback_dma_data;
        struct regmap *regmap;
 };
 
index 04771d14d34342181932df8a5bccf07e19a5191b..b7b4743cc94dd708813bc14681d5e9a361db28e4 100644 (file)
@@ -32,6 +32,7 @@
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
+#include <sound/dmaengine_pcm.h>
 
 #include "tegra20_spdif.h"
 
@@ -318,9 +319,9 @@ static int tegra20_spdif_platform_probe(struct platform_device *pdev)
        }
 
        spdif->playback_dma_data.addr = mem->start + TEGRA20_SPDIF_DATA_OUT;
-       spdif->playback_dma_data.wrap = 4;
-       spdif->playback_dma_data.width = 32;
-       spdif->playback_dma_data.req_sel = dmareq->start;
+       spdif->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+       spdif->capture_dma_data.maxburst = 4;
+       spdif->playback_dma_data.slave_id = dmareq->start;
 
        pm_runtime_enable(&pdev->dev);
        if (!pm_runtime_enabled(&pdev->dev)) {
index b48d699fd583dada33fc3a2631ff82d16b1bec37..85a9aefcc2879d343e628cfbdb53049b3bee7d94 100644 (file)
 
 struct tegra20_spdif {
        struct clk *clk_spdif_out;
-       struct tegra_pcm_dma_params capture_dma_data;
-       struct tegra_pcm_dma_params playback_dma_data;
+       struct snd_dmaengine_dai_dma_data capture_dma_data;
+       struct snd_dmaengine_dai_dma_data playback_dma_data;
        struct regmap *regmap;
 };
 
index e5cfb4ac41bae11a83986afe7f22e23045e250b0..5e08f3e7e6cf6ba22d2e6c2714e51a9539627ecb 100644 (file)
@@ -95,8 +95,8 @@ static int tegra30_ahub_runtime_resume(struct device *dev)
 }
 
 int tegra30_ahub_allocate_rx_fifo(enum tegra30_ahub_rxcif *rxcif,
-                                 unsigned long *fiforeg,
-                                 unsigned long *reqsel)
+                                 dma_addr_t *fiforeg,
+                                 unsigned int *reqsel)
 {
        int channel;
        u32 reg, val;
@@ -178,8 +178,8 @@ int tegra30_ahub_free_rx_fifo(enum tegra30_ahub_rxcif rxcif)
 EXPORT_SYMBOL_GPL(tegra30_ahub_free_rx_fifo);
 
 int tegra30_ahub_allocate_tx_fifo(enum tegra30_ahub_txcif *txcif,
-                                 unsigned long *fiforeg,
-                                 unsigned long *reqsel)
+                                 dma_addr_t *fiforeg,
+                                 unsigned int *reqsel)
 {
        int channel;
        u32 reg, val;
index e690e2eecc92fa644b096a4f2d88e5ea150d8bf1..b7d7c1a303028f2aaecbc763c136dc270c8c5616 100644 (file)
@@ -451,15 +451,15 @@ enum tegra30_ahub_rxcif {
 };
 
 extern int tegra30_ahub_allocate_rx_fifo(enum tegra30_ahub_rxcif *rxcif,
-                                        unsigned long *fiforeg,
-                                        unsigned long *reqsel);
+                                        dma_addr_t *fiforeg,
+                                        unsigned int *reqsel);
 extern int tegra30_ahub_enable_rx_fifo(enum tegra30_ahub_rxcif rxcif);
 extern int tegra30_ahub_disable_rx_fifo(enum tegra30_ahub_rxcif rxcif);
 extern int tegra30_ahub_free_rx_fifo(enum tegra30_ahub_rxcif rxcif);
 
 extern int tegra30_ahub_allocate_tx_fifo(enum tegra30_ahub_txcif *txcif,
-                                        unsigned long *fiforeg,
-                                        unsigned long *reqsel);
+                                        dma_addr_t *fiforeg,
+                                        unsigned int *reqsel);
 extern int tegra30_ahub_enable_tx_fifo(enum tegra30_ahub_txcif txcif);
 extern int tegra30_ahub_disable_tx_fifo(enum tegra30_ahub_txcif txcif);
 extern int tegra30_ahub_free_tx_fifo(enum tegra30_ahub_txcif txcif);
index f4e1ce82750abf1d8ae02f2389b52476ec7bccbd..857ec21e3c7d79b3bee4321b43bf501e0dd1f398 100644 (file)
@@ -38,6 +38,7 @@
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
+#include <sound/dmaengine_pcm.h>
 
 #include "tegra30_ahub.h"
 #include "tegra30_i2s.h"
@@ -80,17 +81,17 @@ static int tegra30_i2s_startup(struct snd_pcm_substream *substream,
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                ret = tegra30_ahub_allocate_tx_fifo(&i2s->playback_fifo_cif,
                                        &i2s->playback_dma_data.addr,
-                                       &i2s->playback_dma_data.req_sel);
-               i2s->playback_dma_data.wrap = 4;
-               i2s->playback_dma_data.width = 32;
+                                       &i2s->playback_dma_data.slave_id);
+               i2s->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+               i2s->playback_dma_data.maxburst = 4;
                tegra30_ahub_set_rx_cif_source(i2s->playback_i2s_cif,
                                               i2s->playback_fifo_cif);
        } else {
                ret = tegra30_ahub_allocate_rx_fifo(&i2s->capture_fifo_cif,
                                        &i2s->capture_dma_data.addr,
-                                       &i2s->capture_dma_data.req_sel);
-               i2s->capture_dma_data.wrap = 4;
-               i2s->capture_dma_data.width = 32;
+                                       &i2s->capture_dma_data.slave_id);
+               i2s->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+               i2s->capture_dma_data.maxburst = 4;
                tegra30_ahub_set_rx_cif_source(i2s->capture_fifo_cif,
                                               i2s->capture_i2s_cif);
        }
index a294d942b9f72aa7c7b2595ca05c98deb6ffe2b9..bea23afe3b9f215f71b3305f065c4902703a74d5 100644 (file)
@@ -231,10 +231,10 @@ struct tegra30_i2s {
        struct clk *clk_i2s;
        enum tegra30_ahub_txcif capture_i2s_cif;
        enum tegra30_ahub_rxcif capture_fifo_cif;
-       struct tegra_pcm_dma_params capture_dma_data;
+       struct snd_dmaengine_dai_dma_data capture_dma_data;
        enum tegra30_ahub_rxcif playback_i2s_cif;
        enum tegra30_ahub_txcif playback_fifo_cif;
-       struct tegra_pcm_dma_params playback_dma_data;
+       struct snd_dmaengine_dai_dma_data playback_dma_data;
        struct regmap *regmap;
 };
 
index e67af0b5d35d03eddc5543d783b6e18376a31e94..f91d08bc175386de1aa8ce495f76ab19c1df8edb 100644 (file)
@@ -81,12 +81,9 @@ static int tegra_pcm_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct device *dev = rtd->platform->dev;
        struct dma_chan *chan = snd_dmaengine_pcm_get_chan(substream);
-       struct tegra_pcm_dma_params *dmap;
        struct dma_slave_config slave_config;
        int ret;
 
-       dmap = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
-
        ret = snd_hwparams_to_dma_slave_config(substream, params,
                                                &slave_config);
        if (ret) {
@@ -94,16 +91,9 @@ static int tegra_pcm_hw_params(struct snd_pcm_substream *substream,
                return ret;
        }
 
-       if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-               slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-               slave_config.dst_addr = dmap->addr;
-               slave_config.dst_maxburst = 4;
-       } else {
-               slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-               slave_config.src_addr = dmap->addr;
-               slave_config.src_maxburst = 4;
-       }
-       slave_config.slave_id = dmap->req_sel;
+       snd_dmaengine_pcm_set_config_from_dai_data(substream,
+                       snd_soc_dai_get_dma_data(rtd->cpu_dai, substream),
+                       &slave_config);
 
        ret = dmaengine_slave_config(chan, &slave_config);
        if (ret < 0) {
index bc8b46af928e1efca0877ac5e93c59e5fba4d9eb..68ad901714a9d5ca6a95f71a8227ecbdf763ff09 100644 (file)
 #ifndef __TEGRA_PCM_H__
 #define __TEGRA_PCM_H__
 
-struct tegra_pcm_dma_params {
-       unsigned long addr;
-       unsigned long wrap;
-       unsigned long width;
-       unsigned long req_sel;
-};
-
 int tegra_pcm_platform_register(struct device *dev);
 void tegra_pcm_platform_unregister(struct device *dev);