.rate_min = 8000,
.channels_min = 2,
.channels_max = 2,
- .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,
return ret;
}
+ if (!strncmp(rtd->cpu_dai->name, "imx-ssi", strlen("imx-ssi")))
+ snd_imx_hardware.buffer_bytes_max = IMX_SSI_DMABUF_SIZE;
+ else if (!strncmp(rtd->cpu_dai->name, "imx-esai", strlen("imx-esai")))
+ snd_imx_hardware.buffer_bytes_max = IMX_ESAI_DMABUF_SIZE;
+ else if (!strncmp(rtd->cpu_dai->name, "imx-spdif", strlen("imx-spdif")))
+ snd_imx_hardware.buffer_bytes_max = IMX_SPDIF_DMABUF_SIZE;
+ else
+ snd_imx_hardware.buffer_bytes_max = IMX_DEFAULT_DMABUF_SIZE;
+
snd_soc_set_runtime_hwparams(substream, &snd_imx_hardware);
return 0;
{
struct imx_ssi *ssi = platform_get_drvdata(pdev);
- ssi->dma_params_tx.burstsize = 6;
- ssi->dma_params_rx.burstsize = 4;
+ if (ssi->dma_params_tx.burstsize == 0
+ && ssi->dma_params_rx.burstsize == 0) {
+ ssi->dma_params_tx.burstsize = 6;
+ ssi->dma_params_rx.burstsize = 4;
+ }
return snd_soc_register_platform(&pdev->dev, &imx_soc_platform_mx2);
}
#include <mach/dma.h>
+#define IMX_DEFAULT_DMABUF_SIZE (64 * 1024)
+#define IMX_SSI_DMABUF_SIZE (64 * 1024)
+#define IMX_ESAI_DMABUF_SIZE (256 * 1024)
+#define IMX_SPDIF_DMABUF_SIZE (64 * 1024)
+
struct imx_pcm_runtime_data {
int period_bytes;
int periods;
#include <mach/hardware.h>
#include "imx-ssi.h"
+#include "imx-pcm.h"
#define SSI_SACNT_DEFAULT (SSI_SACNT_AC97EN | SSI_SACNT_FV)
#define IMX_SSI_FORMATS \
ssi->dma_params_rx.dma_addr = res->start + SSI_SRX0;
ssi->dma_params_tx.dma_addr = res->start + SSI_STX0;
- ssi->dma_params_tx.burstsize = 4;
+ ssi->dma_params_tx.burstsize = 6;
ssi->dma_params_rx.burstsize = 4;
ssi->dma_params_tx.peripheral_type = IMX_DMATYPE_SSI_SP;