]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - sound/soc/omap/omap-pcm.c
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
[karo-tx-linux.git] / sound / soc / omap / omap-pcm.c
index c722c2ef9665c9d6b0e3082077a77755bd4d95c9..c28e042f2208175fa73d07d51587cf6bec150ac4 100644 (file)
@@ -32,8 +32,6 @@
 #include <sound/dmaengine_pcm.h>
 #include <sound/soc.h>
 
-#include "omap-pcm.h"
-
 #ifdef CONFIG_ARCH_OMAP1
 #define pcm_omap1510() cpu_is_omap1510()
 #else
@@ -56,25 +54,6 @@ static const struct snd_pcm_hardware omap_pcm_hardware = {
        .buffer_bytes_max       = 128 * 1024,
 };
 
-static int omap_pcm_get_dma_buswidth(int num_bits)
-{
-       int buswidth;
-
-       switch (num_bits) {
-       case 16:
-               buswidth = DMA_SLAVE_BUSWIDTH_2_BYTES;
-               break;
-       case 32:
-               buswidth = DMA_SLAVE_BUSWIDTH_4_BYTES;
-               break;
-       default:
-               buswidth = -EINVAL;
-               break;
-       }
-       return buswidth;
-}
-
-
 /* this may get called several times by oss emulation */
 static int omap_pcm_hw_params(struct snd_pcm_substream *substream,
                              struct snd_pcm_hw_params *params)
@@ -105,20 +84,9 @@ static int omap_pcm_hw_params(struct snd_pcm_substream *substream,
        if (err)
                return err;
 
-       /* Override the *_dma addr_width if requested by the DAI driver */
-       if (dma_data->data_type) {
-               int buswidth = omap_pcm_get_dma_buswidth(dma_data->data_type);
-
-               if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-                       config.dst_addr_width = buswidth;
-               else
-                       config.src_addr_width = buswidth;
-       }
-
-       config.src_addr = dma_data->port_addr;
-       config.dst_addr = dma_data->port_addr;
-       config.src_maxburst = dma_data->packet_size;
-       config.dst_maxburst = dma_data->packet_size;
+       snd_dmaengine_pcm_set_config_from_dai_data(substream,
+                       snd_soc_dai_get_dma_data(rtd->cpu_dai, substream),
+                       &config);
 
        return dmaengine_slave_config(chan, &config);
 }
@@ -129,37 +97,6 @@ static int omap_pcm_hw_free(struct snd_pcm_substream *substream)
        return 0;
 }
 
-static int omap_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
-{
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct omap_pcm_dma_data *dma_data;
-       int ret = 0;
-
-       dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
-
-       switch (cmd) {
-       case SNDRV_PCM_TRIGGER_START:
-       case SNDRV_PCM_TRIGGER_RESUME:
-       case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-               /* Configure McBSP internal buffer usage */
-               if (dma_data->set_threshold)
-                       dma_data->set_threshold(substream);
-               break;
-
-       case SNDRV_PCM_TRIGGER_STOP:
-       case SNDRV_PCM_TRIGGER_SUSPEND:
-       case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-               break;
-       default:
-               ret = -EINVAL;
-       }
-
-       if (ret == 0)
-               ret = snd_dmaengine_pcm_trigger(substream, cmd);
-
-       return ret;
-}
-
 static snd_pcm_uframes_t omap_pcm_pointer(struct snd_pcm_substream *substream)
 {
        snd_pcm_uframes_t offset;
@@ -175,20 +112,15 @@ static snd_pcm_uframes_t omap_pcm_pointer(struct snd_pcm_substream *substream)
 static int omap_pcm_open(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct omap_pcm_dma_data *dma_data;
+       struct snd_dmaengine_dai_dma_data *dma_data;
 
        snd_soc_set_runtime_hwparams(substream, &omap_pcm_hardware);
 
        dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
-       return snd_dmaengine_pcm_open(substream, omap_dma_filter_fn,
-                                     &dma_data->dma_req);
-}
-
-static int omap_pcm_close(struct snd_pcm_substream *substream)
-{
-       snd_dmaengine_pcm_close(substream);
-       return 0;
+       return snd_dmaengine_pcm_open_request_chan(substream,
+                                                  omap_dma_filter_fn,
+                                                  dma_data->filter_data);
 }
 
 static int omap_pcm_mmap(struct snd_pcm_substream *substream,
@@ -204,11 +136,11 @@ static int omap_pcm_mmap(struct snd_pcm_substream *substream,
 
 static struct snd_pcm_ops omap_pcm_ops = {
        .open           = omap_pcm_open,
-       .close          = omap_pcm_close,
+       .close          = snd_dmaengine_pcm_close_release_chan,
        .ioctl          = snd_pcm_lib_ioctl,
        .hw_params      = omap_pcm_hw_params,
        .hw_free        = omap_pcm_hw_free,
-       .trigger        = omap_pcm_trigger,
+       .trigger        = snd_dmaengine_pcm_trigger,
        .pointer        = omap_pcm_pointer,
        .mmap           = omap_pcm_mmap,
 };