ASoC: pxa: use snd_dmaengine_dai_dma_data
authorDaniel Mack <zonque@gmail.com>
Mon, 12 Aug 2013 08:42:39 +0000 (10:42 +0200)
committerMark Brown <broonie@linaro.org>
Thu, 15 Aug 2013 10:29:07 +0000 (11:29 +0100)
Use snd_dmaengine_dai_dma_data for passing the dma parameters from
clients to the pxa pcm lib. This does no functional change, it's just an
intermedia step to migrate the pxa bits over to dmaengine.

The calculation of dcmd is a transition hack which will be removed again
in a later patch. It's just there to make the transition more readable.

Signed-off-by: Daniel Mack <zonque@gmail.com>
Acked-by: Mark Brown <broonie@linaro.org>
Signed-off-by: Mark Brown <broonie@linaro.org>
include/sound/pxa2xx-lib.h
sound/arm/pxa2xx-ac97.c
sound/arm/pxa2xx-pcm-lib.c
sound/arm/pxa2xx-pcm.c
sound/arm/pxa2xx-pcm.h
sound/soc/pxa/mmp-pcm.c
sound/soc/pxa/mmp-sspa.c
sound/soc/pxa/pxa-ssp.c
sound/soc/pxa/pxa2xx-ac97.c
sound/soc/pxa/pxa2xx-i2s.c
sound/soc/pxa/pxa2xx-pcm.c

index 2fd3d251d9a54e4896453508fcd3bcd86ebfbf26..56e818e4a1cbf90270d21c3a67e44ff3a0f32d73 100644 (file)
@@ -6,13 +6,6 @@
 
 /* PCM */
 
-struct pxa2xx_pcm_dma_params {
-       char *name;                     /* stream identifier */
-       u32 dcmd;                       /* DMA descriptor dcmd field */
-       volatile u32 *drcmr;            /* the DMA request channel to use */
-       u32 dev_addr;                   /* device physical address for DMA */
-};
-
 extern int __pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params);
 extern int __pxa2xx_pcm_hw_free(struct snd_pcm_substream *substream);
index ce431e6e07cfc7df27e8320d6da1b13516310df9..5066a3768b2841a4f46d8cbb8116b4d8276334da 100644 (file)
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/dmaengine.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/ac97_codec.h>
 #include <sound/initval.h>
 #include <sound/pxa2xx-lib.h>
+#include <sound/dmaengine_pcm.h>
 
 #include <mach/regs-ac97.h>
 #include <mach/audio.h>
@@ -41,20 +43,20 @@ static struct snd_ac97_bus_ops pxa2xx_ac97_ops = {
        .reset  = pxa2xx_ac97_reset,
 };
 
-static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_out = {
-       .name                   = "AC97 PCM out",
-       .dev_addr               = __PREG(PCDR),
-       .drcmr                  = &DRCMR(12),
-       .dcmd                   = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-                                 DCMD_BURST32 | DCMD_WIDTH4,
+static unsigned long pxa2xx_ac97_pcm_out_req = 12;
+static struct snd_dmaengine_dai_dma_data pxa2xx_ac97_pcm_out = {
+       .addr           = __PREG(PCDR),
+       .addr_width     = DMA_SLAVE_BUSWIDTH_4_BYTES,
+       .maxburst       = 32,
+       .filter_data    = &pxa2xx_ac97_pcm_out_req,
 };
 
-static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_in = {
-       .name                   = "AC97 PCM in",
-       .dev_addr               = __PREG(PCDR),
-       .drcmr                  = &DRCMR(11),
-       .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-                                 DCMD_BURST32 | DCMD_WIDTH4,
+static unsigned long pxa2xx_ac97_pcm_in_req = 11;
+static struct snd_dmaengine_dai_dma_data pxa2xx_ac97_pcm_in = {
+       .addr           = __PREG(PCDR),
+       .addr_width     = DMA_SLAVE_BUSWIDTH_4_BYTES,
+       .maxburst       = 32,
+       .filter_data    = &pxa2xx_ac97_pcm_in_req,
 };
 
 static struct snd_pcm *pxa2xx_ac97_pcm;
index 823359ed95e16a0969ee6c28843a4777387d3561..a61d7a9a995e86daaeea8b8243c93f9fbfe911d2 100644 (file)
@@ -7,11 +7,13 @@
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/dma-mapping.h>
+#include <linux/dmaengine.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/pxa2xx-lib.h>
+#include <sound/dmaengine_pcm.h>
 
 #include <mach/dma.h>
 
@@ -43,6 +45,35 @@ int __pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
        size_t period = params_period_bytes(params);
        pxa_dma_desc *dma_desc;
        dma_addr_t dma_buff_phys, next_desc_phys;
+       u32 dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG;
+
+       /* temporary transition hack */
+       switch (rtd->params->addr_width) {
+       case DMA_SLAVE_BUSWIDTH_1_BYTE:
+               dcmd |= DCMD_WIDTH1;
+               break;
+       case DMA_SLAVE_BUSWIDTH_2_BYTES:
+               dcmd |= DCMD_WIDTH2;
+               break;
+       case DMA_SLAVE_BUSWIDTH_4_BYTES:
+               dcmd |= DCMD_WIDTH4;
+               break;
+       default:
+               /* can't happen */
+               break;
+       }
+
+       switch (rtd->params->maxburst) {
+       case 8:
+               dcmd |= DCMD_BURST8;
+               break;
+       case 16:
+               dcmd |= DCMD_BURST16;
+               break;
+       case 32:
+               dcmd |= DCMD_BURST32;
+               break;
+       }
 
        snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
        runtime->dma_bytes = totsize;
@@ -55,14 +86,14 @@ int __pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
                dma_desc->ddadr = next_desc_phys;
                if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                        dma_desc->dsadr = dma_buff_phys;
-                       dma_desc->dtadr = rtd->params->dev_addr;
+                       dma_desc->dtadr = rtd->params->addr;
                } else {
-                       dma_desc->dsadr = rtd->params->dev_addr;
+                       dma_desc->dsadr = rtd->params->addr;
                        dma_desc->dtadr = dma_buff_phys;
                }
                if (period > totsize)
                        period = totsize;
-               dma_desc->dcmd = rtd->params->dcmd | period | DCMD_ENDIRQEN;
+               dma_desc->dcmd = dcmd | period | DCMD_ENDIRQEN;
                dma_desc++;
                dma_buff_phys += period;
        } while (totsize -= period);
@@ -76,8 +107,10 @@ int __pxa2xx_pcm_hw_free(struct snd_pcm_substream *substream)
 {
        struct pxa2xx_runtime_data *rtd = substream->runtime->private_data;
 
-       if (rtd && rtd->params && rtd->params->drcmr)
-               *rtd->params->drcmr = 0;
+       if (rtd && rtd->params && rtd->params->filter_data) {
+               unsigned long req = *(unsigned long *) rtd->params->filter_data;
+               DRCMR(req) = 0;
+       }
 
        snd_pcm_set_runtime_buffer(substream, NULL);
        return 0;
@@ -136,6 +169,7 @@ EXPORT_SYMBOL(pxa2xx_pcm_pointer);
 int __pxa2xx_pcm_prepare(struct snd_pcm_substream *substream)
 {
        struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
+       unsigned long req;
 
        if (!prtd || !prtd->params)
                return 0;
@@ -146,7 +180,8 @@ int __pxa2xx_pcm_prepare(struct snd_pcm_substream *substream)
        DCSR(prtd->dma_ch) &= ~DCSR_RUN;
        DCSR(prtd->dma_ch) = 0;
        DCMD(prtd->dma_ch) = 0;
-       *prtd->params->drcmr = prtd->dma_ch | DRCMR_MAPVLD;
+       req = *(unsigned long *) prtd->params->filter_data;
+       DRCMR(req) = prtd->dma_ch | DRCMR_MAPVLD;
 
        return 0;
 }
@@ -155,7 +190,6 @@ EXPORT_SYMBOL(__pxa2xx_pcm_prepare);
 void pxa2xx_pcm_dma_irq(int dma_ch, void *dev_id)
 {
        struct snd_pcm_substream *substream = dev_id;
-       struct pxa2xx_runtime_data *rtd = substream->runtime->private_data;
        int dcsr;
 
        dcsr = DCSR(dma_ch);
@@ -164,8 +198,8 @@ void pxa2xx_pcm_dma_irq(int dma_ch, void *dev_id)
        if (dcsr & DCSR_ENDINTR) {
                snd_pcm_period_elapsed(substream);
        } else {
-               printk(KERN_ERR "%s: DMA error on channel %d (DCSR=%#x)\n",
-                       rtd->params->name, dma_ch, dcsr);
+               printk(KERN_ERR "DMA error on channel %d (DCSR=%#x)\n",
+                       dma_ch, dcsr);
                snd_pcm_stream_lock(substream);
                snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
                snd_pcm_stream_unlock(substream);
index 26422a3584ea6684e934f66b33a7f9aad8b5b762..69a2455b447210d42c2bf2c37b23fbe9035eada9 100644 (file)
  */
 
 #include <linux/module.h>
+#include <linux/dmaengine.h>
+
 #include <sound/core.h>
 #include <sound/pxa2xx-lib.h>
+#include <sound/dmaengine_pcm.h>
 
 #include "pxa2xx-pcm.h"
 
@@ -40,7 +43,7 @@ static int pxa2xx_pcm_open(struct snd_pcm_substream *substream)
 
        rtd->params = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
                      client->playback_params : client->capture_params;
-       ret = pxa_request_dma(rtd->params->name, DMA_PRIO_LOW,
+       ret = pxa_request_dma("dma", DMA_PRIO_LOW,
                              pxa2xx_pcm_dma_irq, substream);
        if (ret < 0)
                goto err2;
index 65f86b56ba422a2c28c6d0c70c731c6250df7c63..2a8fc08d52a173686fa9e946f2f3932179a64812 100644 (file)
 
 struct pxa2xx_runtime_data {
        int dma_ch;
-       struct pxa2xx_pcm_dma_params *params;
+       struct snd_dmaengine_dai_dma_data *params;
        pxa_dma_desc *dma_desc_array;
        dma_addr_t dma_desc_array_phys;
 };
 
 struct pxa2xx_pcm_client {
-       struct pxa2xx_pcm_dma_params *playback_params;
-       struct pxa2xx_pcm_dma_params *capture_params;
+       struct snd_dmaengine_dai_dma_data *playback_params;
+       struct snd_dmaengine_dai_dma_data *capture_params;
        int (*startup)(struct snd_pcm_substream *);
        void (*shutdown)(struct snd_pcm_substream *);
        int (*prepare)(struct snd_pcm_substream *);
index 5d57e071cdf522e8f8b11670c32a47595b5d6e92..9a97843ab09f1270e97e7751a2ce86b637d85757 100644 (file)
@@ -17,6 +17,8 @@
 #include <linux/dmaengine.h>
 #include <linux/platform_data/dma-mmp_tdma.h>
 #include <linux/platform_data/mmp_audio.h>
+#include <linux/dmaengine.h>
+
 #include <sound/pxa2xx-lib.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
@@ -67,7 +69,7 @@ static int mmp_pcm_hw_params(struct snd_pcm_substream *substream,
 {
        struct dma_chan *chan = snd_dmaengine_pcm_get_chan(substream);
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct pxa2xx_pcm_dma_params *dma_params;
+       struct snd_dmaengine_dai_dma_data *dma_params;
        struct dma_slave_config slave_config;
        int ret;
 
@@ -80,10 +82,10 @@ static int mmp_pcm_hw_params(struct snd_pcm_substream *substream,
                return ret;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-               slave_config.dst_addr     = dma_params->dev_addr;
+               slave_config.dst_addr     = dma_params->addr;
                slave_config.dst_maxburst = 4;
        } else {
-               slave_config.src_addr     = dma_params->dev_addr;
+               slave_config.src_addr     = dma_params->addr;
                slave_config.src_maxburst = 4;
        }
 
index 1605934d525eca7e35f1bfdd4cadd3302aef3276..41752a5fe3b07148c5402b2ea66d6f292fdc3133 100644 (file)
 #include <linux/slab.h>
 #include <linux/pxa2xx_ssp.h>
 #include <linux/io.h>
+#include <linux/dmaengine.h>
+
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/initval.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
 #include <sound/pxa2xx-lib.h>
+#include <sound/dmaengine_pcm.h>
 #include "mmp-sspa.h"
 
 /*
@@ -40,7 +43,7 @@
  */
 struct sspa_priv {
        struct ssp_device *sspa;
-       struct pxa2xx_pcm_dma_params *dma_params;
+       struct snd_dmaengine_dai_dma_data *dma_params;
        struct clk *audio_clk;
        struct clk *sysclk;
        int dai_fmt;
@@ -266,7 +269,7 @@ static int mmp_sspa_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        struct sspa_priv *sspa_priv = snd_soc_dai_get_drvdata(dai);
        struct ssp_device *sspa = sspa_priv->sspa;
-       struct pxa2xx_pcm_dma_params *dma_params;
+       struct snd_dmaengine_dai_dma_data *dma_params;
        u32 sspa_ctrl;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -309,7 +312,7 @@ static int mmp_sspa_hw_params(struct snd_pcm_substream *substream,
        }
 
        dma_params = &sspa_priv->dma_params[substream->stream];
-       dma_params->dev_addr = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?
+       dma_params->addr = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?
                                (sspa->phys_base + SSPA_TXD) :
                                (sspa->phys_base + SSPA_RXD);
        snd_soc_dai_set_dma_data(cpu_dai, substream, dma_params);
@@ -425,7 +428,8 @@ static int asoc_mmp_sspa_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        priv->dma_params = devm_kzalloc(&pdev->dev,
-                       2 * sizeof(struct pxa2xx_pcm_dma_params), GFP_KERNEL);
+                       2 * sizeof(struct snd_dmaengine_dai_dma_data),
+                       GFP_KERNEL);
        if (priv->dma_params == NULL)
                return -ENOMEM;
 
index 19296f22cb28d430e0cea86706cfcf2e9c501dcf..c0dcc3538e35d8e44cc549b6a157bf224ee589f9 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/io.h>
 #include <linux/pxa2xx_ssp.h>
 #include <linux/of.h>
+#include <linux/dmaengine.h>
 
 #include <asm/irq.h>
 
@@ -31,9 +32,9 @@
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
 #include <sound/pxa2xx-lib.h>
+#include <sound/dmaengine_pcm.h>
 
 #include <mach/hardware.h>
-#include <mach/dma.h>
 
 #include "../../arm/pxa2xx-pcm.h"
 #include "pxa-ssp.h"
@@ -80,27 +81,14 @@ static void pxa_ssp_disable(struct ssp_device *ssp)
        __raw_writel(sscr0, ssp->mmio_base + SSCR0);
 }
 
-struct pxa2xx_pcm_dma_data {
-       struct pxa2xx_pcm_dma_params params;
-       char name[20];
-};
-
 static void pxa_ssp_set_dma_params(struct ssp_device *ssp, int width4,
-                       int out, struct pxa2xx_pcm_dma_params *dma_data)
+                       int out, struct snd_dmaengine_dai_dma_data *dma)
 {
-       struct pxa2xx_pcm_dma_data *dma;
-
-       dma = container_of(dma_data, struct pxa2xx_pcm_dma_data, params);
-
-       snprintf(dma->name, 20, "SSP%d PCM %s %s", ssp->port_id,
-                       width4 ? "32-bit" : "16-bit", out ? "out" : "in");
-
-       dma->params.name = dma->name;
-       dma->params.drcmr = &DRCMR(out ? ssp->drcmr_tx : ssp->drcmr_rx);
-       dma->params.dcmd = (out ? (DCMD_INCSRCADDR | DCMD_FLOWTRG) :
-                                 (DCMD_INCTRGADDR | DCMD_FLOWSRC)) |
-                       (width4 ? DCMD_WIDTH4 : DCMD_WIDTH2) | DCMD_BURST16;
-       dma->params.dev_addr = ssp->phys_base + SSDR;
+       dma->filter_data = out ? &ssp->drcmr_tx : &ssp->drcmr_rx;
+       dma->addr_width = width4 ? DMA_SLAVE_BUSWIDTH_4_BYTES :
+                                  DMA_SLAVE_BUSWIDTH_2_BYTES;
+       dma->maxburst = 16;
+       dma->addr = ssp->phys_base + SSDR;
 }
 
 static int pxa_ssp_startup(struct snd_pcm_substream *substream,
@@ -108,7 +96,7 @@ static int pxa_ssp_startup(struct snd_pcm_substream *substream,
 {
        struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
-       struct pxa2xx_pcm_dma_data *dma;
+       struct snd_dmaengine_dai_dma_data *dma;
        int ret = 0;
 
        if (!cpu_dai->active) {
@@ -116,10 +104,10 @@ static int pxa_ssp_startup(struct snd_pcm_substream *substream,
                pxa_ssp_disable(ssp);
        }
 
-       dma = kzalloc(sizeof(struct pxa2xx_pcm_dma_data), GFP_KERNEL);
+       dma = kzalloc(sizeof(struct snd_dmaengine_dai_dma_data), GFP_KERNEL);
        if (!dma)
                return -ENOMEM;
-       snd_soc_dai_set_dma_data(cpu_dai, substream, &dma->params);
+       snd_soc_dai_set_dma_data(cpu_dai, substream, dma);
 
        return ret;
 }
@@ -560,7 +548,7 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
        u32 sspsp;
        int width = snd_pcm_format_physical_width(params_format(params));
        int ttsa = pxa_ssp_read_reg(ssp, SSTSA) & 0xf;
-       struct pxa2xx_pcm_dma_params *dma_data;
+       struct snd_dmaengine_dai_dma_data *dma_data;
 
        dma_data = snd_soc_dai_get_dma_data(cpu_dai, substream);
 
index 1475515712e65616b345f3d7e56ddedf954f6b4a..f1059d999de6d4128791861d2325cd8bf68371dd 100644 (file)
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/dmaengine.h>
 
 #include <sound/core.h>
 #include <sound/ac97_codec.h>
 #include <sound/soc.h>
 #include <sound/pxa2xx-lib.h>
+#include <sound/dmaengine_pcm.h>
 
 #include <mach/hardware.h>
 #include <mach/regs-ac97.h>
-#include <mach/dma.h>
 #include <mach/audio.h>
 
 #include "pxa2xx-ac97.h"
@@ -48,44 +49,44 @@ static struct snd_ac97_bus_ops pxa2xx_ac97_ops = {
        .reset  = pxa2xx_ac97_cold_reset,
 };
 
-static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_stereo_out = {
-       .name                   = "AC97 PCM Stereo out",
-       .dev_addr               = __PREG(PCDR),
-       .drcmr                  = &DRCMR(12),
-       .dcmd                   = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-                                 DCMD_BURST32 | DCMD_WIDTH4,
+static unsigned long pxa2xx_ac97_pcm_stereo_in_req = 12;
+static struct snd_dmaengine_dai_dma_data pxa2xx_ac97_pcm_stereo_in = {
+       .addr           = __PREG(PCDR),
+       .addr_width     = DMA_SLAVE_BUSWIDTH_4_BYTES,
+       .maxburst       = 32,
+       .filter_data    = &pxa2xx_ac97_pcm_stereo_in_req,
 };
 
-static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_stereo_in = {
-       .name                   = "AC97 PCM Stereo in",
-       .dev_addr               = __PREG(PCDR),
-       .drcmr                  = &DRCMR(11),
-       .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-                                 DCMD_BURST32 | DCMD_WIDTH4,
+static unsigned long pxa2xx_ac97_pcm_stereo_out_req = 11;
+static struct snd_dmaengine_dai_dma_data pxa2xx_ac97_pcm_stereo_out = {
+       .addr           = __PREG(PCDR),
+       .addr_width     = DMA_SLAVE_BUSWIDTH_4_BYTES,
+       .maxburst       = 32,
+       .filter_data    = &pxa2xx_ac97_pcm_stereo_out_req,
 };
 
-static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_aux_mono_out = {
-       .name                   = "AC97 Aux PCM (Slot 5) Mono out",
-       .dev_addr               = __PREG(MODR),
-       .drcmr                  = &DRCMR(10),
-       .dcmd                   = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-                                 DCMD_BURST16 | DCMD_WIDTH2,
+static unsigned long pxa2xx_ac97_pcm_aux_mono_out_req = 10;
+static struct snd_dmaengine_dai_dma_data pxa2xx_ac97_pcm_aux_mono_out = {
+       .addr           = __PREG(MODR),
+       .addr_width     = DMA_SLAVE_BUSWIDTH_2_BYTES,
+       .maxburst       = 16,
+       .filter_data    = &pxa2xx_ac97_pcm_aux_mono_out_req,
 };
 
-static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_aux_mono_in = {
-       .name                   = "AC97 Aux PCM (Slot 5) Mono in",
-       .dev_addr               = __PREG(MODR),
-       .drcmr                  = &DRCMR(9),
-       .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-                                 DCMD_BURST16 | DCMD_WIDTH2,
+static unsigned long pxa2xx_ac97_pcm_aux_mono_in_req = 9;
+static struct snd_dmaengine_dai_dma_data pxa2xx_ac97_pcm_aux_mono_in = {
+       .addr           = __PREG(MODR),
+       .addr_width     = DMA_SLAVE_BUSWIDTH_2_BYTES,
+       .maxburst       = 16,
+       .filter_data    = &pxa2xx_ac97_pcm_aux_mono_in_req,
 };
 
-static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_mic_mono_in = {
-       .name                   = "AC97 Mic PCM (Slot 6) Mono in",
-       .dev_addr               = __PREG(MCDR),
-       .drcmr                  = &DRCMR(8),
-       .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-                                 DCMD_BURST16 | DCMD_WIDTH2,
+static unsigned long pxa2xx_ac97_pcm_aux_mic_mono_req = 8;
+static struct snd_dmaengine_dai_dma_data pxa2xx_ac97_pcm_mic_mono_in = {
+       .addr           = __PREG(MCDR),
+       .addr_width     = DMA_SLAVE_BUSWIDTH_2_BYTES,
+       .maxburst       = 16,
+       .filter_data    = &pxa2xx_ac97_pcm_aux_mic_mono_req,
 };
 
 #ifdef CONFIG_PM
@@ -119,7 +120,7 @@ static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params,
                                 struct snd_soc_dai *cpu_dai)
 {
-       struct pxa2xx_pcm_dma_params *dma_data;
+       struct snd_dmaengine_dai_dma_data *dma_data;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                dma_data = &pxa2xx_ac97_pcm_stereo_out;
@@ -135,7 +136,7 @@ static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream,
                                     struct snd_pcm_hw_params *params,
                                     struct snd_soc_dai *cpu_dai)
 {
-       struct pxa2xx_pcm_dma_params *dma_data;
+       struct snd_dmaengine_dai_dma_data *dma_data;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                dma_data = &pxa2xx_ac97_pcm_aux_mono_out;
index f7ca716641126bdb65ff5815823a500719bbeba8..d5340a088858eff3f8a8b578a38a2ea3e7476bf1 100644 (file)
@@ -23,9 +23,9 @@
 #include <sound/initval.h>
 #include <sound/soc.h>
 #include <sound/pxa2xx-lib.h>
+#include <sound/dmaengine_pcm.h>
 
 #include <mach/hardware.h>
-#include <mach/dma.h>
 #include <mach/audio.h>
 
 #include "pxa2xx-i2s.h"
@@ -82,20 +82,20 @@ static struct pxa_i2s_port pxa_i2s;
 static struct clk *clk_i2s;
 static int clk_ena = 0;
 
-static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_out = {
-       .name                   = "I2S PCM Stereo out",
-       .dev_addr               = __PREG(SADR),
-       .drcmr                  = &DRCMR(3),
-       .dcmd                   = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-                                 DCMD_BURST32 | DCMD_WIDTH4,
+static unsigned long pxa2xx_i2s_pcm_stereo_out_req = 3;
+static struct snd_dmaengine_dai_dma_data pxa2xx_i2s_pcm_stereo_out = {
+       .addr           = __PREG(SADR),
+       .addr_width     = DMA_SLAVE_BUSWIDTH_4_BYTES,
+       .maxburst       = 32,
+       .filter_data    = &pxa2xx_i2s_pcm_stereo_out_req,
 };
 
-static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_in = {
-       .name                   = "I2S PCM Stereo in",
-       .dev_addr               = __PREG(SADR),
-       .drcmr                  = &DRCMR(2),
-       .dcmd                   = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-                                 DCMD_BURST32 | DCMD_WIDTH4,
+static unsigned long pxa2xx_i2s_pcm_stereo_in_req = 2;
+static struct snd_dmaengine_dai_dma_data pxa2xx_i2s_pcm_stereo_in = {
+       .addr           = __PREG(SADR),
+       .addr_width     = DMA_SLAVE_BUSWIDTH_4_BYTES,
+       .maxburst       = 32,
+       .filter_data    = &pxa2xx_i2s_pcm_stereo_in_req,
 };
 
 static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream,
@@ -163,7 +163,7 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params,
                                struct snd_soc_dai *dai)
 {
-       struct pxa2xx_pcm_dma_params *dma_data;
+       struct snd_dmaengine_dai_dma_data *dma_data;
 
        BUG_ON(IS_ERR(clk_i2s));
        clk_prepare_enable(clk_i2s);
index ecff116cb7b034484cd3c420ae483d576ef0db95..0aa2d695064a45fb791aa490c100734844e43a60 100644 (file)
 
 #include <linux/dma-mapping.h>
 #include <linux/module.h>
+#include <linux/dmaengine.h>
 
 #include <sound/core.h>
 #include <sound/soc.h>
 #include <sound/pxa2xx-lib.h>
+#include <sound/dmaengine_pcm.h>
 
 #include "../../arm/pxa2xx-pcm.h"
 
@@ -25,7 +27,7 @@ static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct pxa2xx_runtime_data *prtd = runtime->private_data;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct pxa2xx_pcm_dma_params *dma;
+       struct snd_dmaengine_dai_dma_data *dma;
        int ret;
 
        dma = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
@@ -39,7 +41,7 @@ static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
         * with different params */
        if (prtd->params == NULL) {
                prtd->params = dma;
-               ret = pxa_request_dma(prtd->params->name, DMA_PRIO_LOW,
+               ret = pxa_request_dma("name", DMA_PRIO_LOW,
                              pxa2xx_pcm_dma_irq, substream);
                if (ret < 0)
                        return ret;
@@ -47,7 +49,7 @@ static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
        } else if (prtd->params != dma) {
                pxa_free_dma(prtd->dma_ch);
                prtd->params = dma;
-               ret = pxa_request_dma(prtd->params->name, DMA_PRIO_LOW,
+               ret = pxa_request_dma("name", DMA_PRIO_LOW,
                              pxa2xx_pcm_dma_irq, substream);
                if (ret < 0)
                        return ret;