Merge branch 'for-2.6.39' into for-2.6.40
[firefly-linux-kernel-4.4.55.git] / sound / soc / blackfin / bf5xx-i2s-pcm.c
index 890a0dccf902a4fc14922cd11565406df86ec0b7..b5101efd1c8733bd002cf5ae700f5807b665ebed 100644 (file)
@@ -148,10 +148,15 @@ static snd_pcm_uframes_t bf5xx_pcm_pointer(struct snd_pcm_substream *substream)
 
 static int bf5xx_pcm_open(struct snd_pcm_substream *substream)
 {
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct sport_device *sport_handle = snd_soc_dai_get_drvdata(cpu_dai);
        struct snd_pcm_runtime *runtime = substream->runtime;
+       struct snd_dma_buffer *buf = &substream->dma_buffer;
        int ret;
 
        pr_debug("%s enter\n", __func__);
+
        snd_soc_set_runtime_hwparams(substream, &bf5xx_pcm_hardware);
 
        ret = snd_pcm_hw_constraint_integer(runtime, \
@@ -159,9 +164,14 @@ static int bf5xx_pcm_open(struct snd_pcm_substream *substream)
        if (ret < 0)
                goto out;
 
-       if (sport_handle != NULL)
+       if (sport_handle != NULL) {
+               if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+                       sport_handle->tx_buf = buf->area;
+               else
+                       sport_handle->rx_buf = buf->area;
+
                runtime->private_data = sport_handle;
-       else {
+       else {
                pr_err("sport_handle is NULL\n");
                return -1;
        }
@@ -214,11 +224,6 @@ static int bf5xx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
        pr_debug("%s, area:%p, size:0x%08lx\n", __func__,
                buf->area, buf->bytes);
 
-       if (stream == SNDRV_PCM_STREAM_PLAYBACK)
-               sport_handle->tx_buf = buf->area;
-       else
-               sport_handle->rx_buf = buf->area;
-
        return 0;
 }
 
@@ -239,8 +244,6 @@ static void bf5xx_pcm_free_dma_buffers(struct snd_pcm *pcm)
                dma_free_coherent(NULL, buf->bytes, buf->area, 0);
                buf->area = NULL;
        }
-       if (sport_handle)
-               sport_done(sport_handle);
 }
 
 static u64 bf5xx_pcm_dmamask = DMA_BIT_MASK(32);
@@ -292,7 +295,7 @@ static int __devexit bfin_i2s_soc_platform_remove(struct platform_device *pdev)
 
 static struct platform_driver bfin_i2s_pcm_driver = {
        .driver = {
-                       .name = "bfin-pcm-audio",
+                       .name = "bfin-i2s-pcm-audio",
                        .owner = THIS_MODULE,
        },