Re: [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai

2015-06-24 Thread Nicolin Chen
On Tue, Jun 23, 2015 at 06:23:53PM +0800, Shengjiu Wang wrote:
 As the ssi is not the only cpu dai, there are esai, spdif, sai.
 and imx_pcm_dma can be used by all of them. Especially ESAI need
 a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
 dai.
 
 Signed-off-by: Shengjiu Wang shengjiu.w...@freescale.com

Acked-by: Nicolin Chen nicoleots...@gmail.com

Thanks

 ---
  sound/soc/fsl/fsl_esai.c|2 +-
  sound/soc/fsl/fsl_sai.c |2 +-
  sound/soc/fsl/fsl_spdif.c   |2 +-
  sound/soc/fsl/fsl_ssi.c |2 +-
  sound/soc/fsl/imx-pcm-dma.c |   25 +
  sound/soc/fsl/imx-pcm.h |9 +++--
  sound/soc/fsl/imx-ssi.c |2 +-
  7 files changed, 33 insertions(+), 11 deletions(-)
 
 diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
 index 5c75971..8c2ddc1 100644
 --- a/sound/soc/fsl/fsl_esai.c
 +++ b/sound/soc/fsl/fsl_esai.c
 @@ -839,7 +839,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
   return ret;
   }
  
 - ret = imx_pcm_dma_init(pdev);
 + ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
   if (ret)
   dev_err(pdev-dev, failed to init imx pcm dma: %d\n, ret);
  
 diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
 index 5c73bea..a18fd92 100644
 --- a/sound/soc/fsl/fsl_sai.c
 +++ b/sound/soc/fsl/fsl_sai.c
 @@ -791,7 +791,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
   return ret;
  
   if (sai-sai_on_imx)
 - return imx_pcm_dma_init(pdev);
 + return imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE);
   else
   return devm_snd_dmaengine_pcm_register(pdev-dev, NULL, 0);
  }
 diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
 index 8e93221..d1e9be7 100644
 --- a/sound/soc/fsl/fsl_spdif.c
 +++ b/sound/soc/fsl/fsl_spdif.c
 @@ -1255,7 +1255,7 @@ static int fsl_spdif_probe(struct platform_device *pdev)
   return ret;
   }
  
 - ret = imx_pcm_dma_init(pdev);
 + ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
   if (ret)
   dev_err(pdev-dev, imx_pcm_dma_init failed: %d\n, ret);
  
 diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
 index c7647e0..e122dab 100644
 --- a/sound/soc/fsl/fsl_ssi.c
 +++ b/sound/soc/fsl/fsl_ssi.c
 @@ -1257,7 +1257,7 @@ static int fsl_ssi_imx_probe(struct platform_device 
 *pdev,
   if (ret)
   goto error_pcm;
   } else {
 - ret = imx_pcm_dma_init(pdev);
 + ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
   if (ret)
   goto error_pcm;
   }
 diff --git a/sound/soc/fsl/imx-pcm-dma.c b/sound/soc/fsl/imx-pcm-dma.c
 index 0db94f49..1fc01ed 100644
 --- a/sound/soc/fsl/imx-pcm-dma.c
 +++ b/sound/soc/fsl/imx-pcm-dma.c
 @@ -40,7 +40,7 @@ static const struct snd_pcm_hardware imx_pcm_hardware = {
   SNDRV_PCM_INFO_MMAP_VALID |
   SNDRV_PCM_INFO_PAUSE |
   SNDRV_PCM_INFO_RESUME,
 - .buffer_bytes_max = IMX_SSI_DMABUF_SIZE,
 + .buffer_bytes_max = IMX_DEFAULT_DMABUF_SIZE,
   .period_bytes_min = 128,
   .period_bytes_max = 65535, /* Limited by SDMA engine */
   .periods_min = 2,
 @@ -52,13 +52,30 @@ static const struct snd_dmaengine_pcm_config 
 imx_dmaengine_pcm_config = {
   .pcm_hardware = imx_pcm_hardware,
   .prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
   .compat_filter_fn = filter,
 - .prealloc_buffer_size = IMX_SSI_DMABUF_SIZE,
 + .prealloc_buffer_size = IMX_DEFAULT_DMABUF_SIZE,
  };
  
 -int imx_pcm_dma_init(struct platform_device *pdev)
 +int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
  {
 + struct snd_dmaengine_pcm_config *config;
 + struct snd_pcm_hardware *pcm_hardware;
 +
 + config = devm_kzalloc(pdev-dev,
 + sizeof(struct snd_dmaengine_pcm_config), GFP_KERNEL);
 + *config = imx_dmaengine_pcm_config;
 + if (size)
 + config-prealloc_buffer_size = size;
 +
 + pcm_hardware = devm_kzalloc(pdev-dev,
 + sizeof(struct snd_pcm_hardware), GFP_KERNEL);
 + *pcm_hardware = imx_pcm_hardware;
 + if (size)
 + pcm_hardware-buffer_bytes_max = size;
 +
 + config-pcm_hardware = pcm_hardware;
 +
   return devm_snd_dmaengine_pcm_register(pdev-dev,
 - imx_dmaengine_pcm_config,
 + config,
   SND_DMAENGINE_PCM_FLAG_COMPAT);
  }
  EXPORT_SYMBOL_GPL(imx_pcm_dma_init);
 diff --git a/sound/soc/fsl/imx-pcm.h b/sound/soc/fsl/imx-pcm.h
 index c79cb27..133c4470a 100644
 --- a/sound/soc/fsl/imx-pcm.h
 +++ b/sound/soc/fsl/imx-pcm.h
 @@ -20,6 +20,11 @@
   */
  #define IMX_SSI_DMABUF_SIZE  (64 * 1024)
  
 +#define IMX_DEFAULT_DMABUF_SIZE  (64 * 1024)
 +#define IMX_SAI_DMABUF_SIZE  (64 * 1024)
 +#define IMX_SPDIF_DMABUF_SIZE(64 * 1024)
 +#define IMX_ESAI_DMABUF_SIZE (256 * 1024)
 +
  

Re: [PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai

2015-06-24 Thread Timur Tabi

Nicolin Chen wrote:

As the ssi is not the only cpu dai, there are esai, spdif, sai.
and imx_pcm_dma can be used by all of them. Especially ESAI need
a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
dai.

Signed-off-by: Shengjiu Wangshengjiu.w...@freescale.com

Acked-by: Nicolin Chennicoleots...@gmail.com


Acked-by: Timur Tabi ti...@tabi.org

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

[PATCH] ASoC: fsl: Add dedicated DMA buffer size for each cpu dai

2015-06-23 Thread Shengjiu Wang
As the ssi is not the only cpu dai, there are esai, spdif, sai.
and imx_pcm_dma can be used by all of them. Especially ESAI need
a larger DMA buffer size. So Add dedicated DMA buffer for each cpu
dai.

Signed-off-by: Shengjiu Wang shengjiu.w...@freescale.com
---
 sound/soc/fsl/fsl_esai.c|2 +-
 sound/soc/fsl/fsl_sai.c |2 +-
 sound/soc/fsl/fsl_spdif.c   |2 +-
 sound/soc/fsl/fsl_ssi.c |2 +-
 sound/soc/fsl/imx-pcm-dma.c |   25 +
 sound/soc/fsl/imx-pcm.h |9 +++--
 sound/soc/fsl/imx-ssi.c |2 +-
 7 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
index 5c75971..8c2ddc1 100644
--- a/sound/soc/fsl/fsl_esai.c
+++ b/sound/soc/fsl/fsl_esai.c
@@ -839,7 +839,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
return ret;
}
 
-   ret = imx_pcm_dma_init(pdev);
+   ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
if (ret)
dev_err(pdev-dev, failed to init imx pcm dma: %d\n, ret);
 
diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index 5c73bea..a18fd92 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -791,7 +791,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
return ret;
 
if (sai-sai_on_imx)
-   return imx_pcm_dma_init(pdev);
+   return imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE);
else
return devm_snd_dmaengine_pcm_register(pdev-dev, NULL, 0);
 }
diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
index 8e93221..d1e9be7 100644
--- a/sound/soc/fsl/fsl_spdif.c
+++ b/sound/soc/fsl/fsl_spdif.c
@@ -1255,7 +1255,7 @@ static int fsl_spdif_probe(struct platform_device *pdev)
return ret;
}
 
-   ret = imx_pcm_dma_init(pdev);
+   ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
if (ret)
dev_err(pdev-dev, imx_pcm_dma_init failed: %d\n, ret);
 
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index c7647e0..e122dab 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -1257,7 +1257,7 @@ static int fsl_ssi_imx_probe(struct platform_device *pdev,
if (ret)
goto error_pcm;
} else {
-   ret = imx_pcm_dma_init(pdev);
+   ret = imx_pcm_dma_init(pdev, IMX_SSI_DMABUF_SIZE);
if (ret)
goto error_pcm;
}
diff --git a/sound/soc/fsl/imx-pcm-dma.c b/sound/soc/fsl/imx-pcm-dma.c
index 0db94f49..1fc01ed 100644
--- a/sound/soc/fsl/imx-pcm-dma.c
+++ b/sound/soc/fsl/imx-pcm-dma.c
@@ -40,7 +40,7 @@ static const struct snd_pcm_hardware imx_pcm_hardware = {
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_PAUSE |
SNDRV_PCM_INFO_RESUME,
-   .buffer_bytes_max = IMX_SSI_DMABUF_SIZE,
+   .buffer_bytes_max = IMX_DEFAULT_DMABUF_SIZE,
.period_bytes_min = 128,
.period_bytes_max = 65535, /* Limited by SDMA engine */
.periods_min = 2,
@@ -52,13 +52,30 @@ static const struct snd_dmaengine_pcm_config 
imx_dmaengine_pcm_config = {
.pcm_hardware = imx_pcm_hardware,
.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
.compat_filter_fn = filter,
-   .prealloc_buffer_size = IMX_SSI_DMABUF_SIZE,
+   .prealloc_buffer_size = IMX_DEFAULT_DMABUF_SIZE,
 };
 
-int imx_pcm_dma_init(struct platform_device *pdev)
+int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
 {
+   struct snd_dmaengine_pcm_config *config;
+   struct snd_pcm_hardware *pcm_hardware;
+
+   config = devm_kzalloc(pdev-dev,
+   sizeof(struct snd_dmaengine_pcm_config), GFP_KERNEL);
+   *config = imx_dmaengine_pcm_config;
+   if (size)
+   config-prealloc_buffer_size = size;
+
+   pcm_hardware = devm_kzalloc(pdev-dev,
+   sizeof(struct snd_pcm_hardware), GFP_KERNEL);
+   *pcm_hardware = imx_pcm_hardware;
+   if (size)
+   pcm_hardware-buffer_bytes_max = size;
+
+   config-pcm_hardware = pcm_hardware;
+
return devm_snd_dmaengine_pcm_register(pdev-dev,
-   imx_dmaengine_pcm_config,
+   config,
SND_DMAENGINE_PCM_FLAG_COMPAT);
 }
 EXPORT_SYMBOL_GPL(imx_pcm_dma_init);
diff --git a/sound/soc/fsl/imx-pcm.h b/sound/soc/fsl/imx-pcm.h
index c79cb27..133c4470a 100644
--- a/sound/soc/fsl/imx-pcm.h
+++ b/sound/soc/fsl/imx-pcm.h
@@ -20,6 +20,11 @@
  */
 #define IMX_SSI_DMABUF_SIZE(64 * 1024)
 
+#define IMX_DEFAULT_DMABUF_SIZE(64 * 1024)
+#define IMX_SAI_DMABUF_SIZE(64 * 1024)
+#define IMX_SPDIF_DMABUF_SIZE  (64 * 1024)
+#define IMX_ESAI_DMABUF_SIZE   (256 * 1024)
+
 static inline void
 imx_pcm_dma_params_init_data(struct imx_dma_data *dma_data,
int dma, enum sdma_peripheral_type peripheral_type)