LF-3724-1: ASoC: fsl_ssi: add sdma_audio_config support
authorShengjiu Wang <shengjiu.wang@nxp.com>
Thu, 25 Mar 2021 02:47:53 +0000 (10:47 +0800)
committerShengjiu Wang <shengjiu.wang@nxp.com>
Wed, 21 Apr 2021 08:00:08 +0000 (16:00 +0800)
Add sdma_audio_config support especially for dual fifo

Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Reviewed-by: Robin Gong <yibin.gong@nxp.com>
sound/soc/fsl/fsl_ssi.c

index b47ffd9..1f57a4b 100644 (file)
@@ -42,6 +42,7 @@
 #include <linux/of_platform.h>
 #include <linux/pm_runtime.h>
 #include <linux/busfreq-imx.h>
+#include <linux/platform_data/dma-imx.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
@@ -290,6 +291,7 @@ struct fsl_ssi {
        u32 dma_maxburst;
 
        struct mutex ac97_reg_lock;
+       struct sdma_audio_config audio_config[2];
 };
 
 /*
@@ -863,15 +865,23 @@ static int fsl_ssi_hw_params(struct snd_pcm_substream *substream,
 
        if (ssi->use_dyna_fifo) {
                if (channels == 1) {
-                       ssi->dma_params_tx.fifo_num  = 1;
-                       ssi->dma_params_rx.fifo_num  = 1;
+                       ssi->audio_config[0].dst_fifo_num = 1;
+                       ssi->audio_config[1].src_fifo_num = 1;
+                       ssi->dma_params_tx.peripheral_config = &ssi->audio_config[0];
+                       ssi->dma_params_tx.peripheral_size = sizeof(ssi->audio_config[0]);
+                       ssi->dma_params_rx.peripheral_config = &ssi->audio_config[1];
+                       ssi->dma_params_rx.peripheral_size = sizeof(ssi->audio_config[1]);
                        vals[RX].srcr &= ~SSI_SRCR_RFEN1;
                        vals[TX].stcr &= ~SSI_STCR_TFEN1;
                        vals[RX].scr  &= ~SSI_SCR_TCH_EN;
                        vals[TX].scr  &= ~SSI_SCR_TCH_EN;
                } else {
-                       ssi->dma_params_tx.fifo_num  = 2;
-                       ssi->dma_params_rx.fifo_num  = 2;
+                       ssi->audio_config[0].dst_fifo_num = 2;
+                       ssi->audio_config[1].src_fifo_num = 2;
+                       ssi->dma_params_tx.peripheral_config = &ssi->audio_config[0];
+                       ssi->dma_params_tx.peripheral_size = sizeof(ssi->audio_config[0]);
+                       ssi->dma_params_rx.peripheral_config = &ssi->audio_config[1];
+                       ssi->dma_params_rx.peripheral_size = sizeof(ssi->audio_config[1]);
                        vals[RX].srcr |= SSI_SRCR_RFEN1;
                        vals[TX].stcr |= SSI_STCR_TFEN1;
                        vals[RX].scr  |= SSI_SCR_TCH_EN;