LF-3724-2: ASoC: fsl_sai: add sdma_audio_config support
authorShengjiu Wang <shengjiu.wang@nxp.com>
Thu, 25 Mar 2021 02:45:38 +0000 (10:45 +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 multi fifo.

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

index 37536e5..7dc6a1a 100644 (file)
@@ -643,15 +643,19 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,
 
                if (sai->is_multi_lane) {
                        if (tx) {
-                               sai->dma_params_tx.maxburst =
-                                               FSL_SAI_MAXBURST_TX * pins;
-                               sai->dma_params_tx.fifo_num = pins +
-                                          (dl_cfg[dl_cfg_idx].offset[tx] << 4);
+                               sai->audio_config[tx].words_per_fifo = slots;
+                               sai->audio_config[tx].dst_fifo_num = pins;
+                               sai->audio_config[tx].dst_fifo_off = dl_cfg[dl_cfg_idx].offset[tx];
+                               sai->dma_params_tx.maxburst = FSL_SAI_MAXBURST_TX * pins;
+                               sai->dma_params_tx.peripheral_config = &sai->audio_config[tx];
+                               sai->dma_params_tx.peripheral_size = sizeof(sai->audio_config[tx]);
                        } else {
-                               sai->dma_params_rx.maxburst =
-                                       FSL_SAI_MAXBURST_RX * pins;
-                               sai->dma_params_rx.fifo_num = pins +
-                                         (dl_cfg[dl_cfg_idx].offset[tx] << 4);
+                               sai->audio_config[tx].words_per_fifo = slots;
+                               sai->audio_config[tx].src_fifo_num = pins;
+                               sai->audio_config[tx].src_fifo_off = dl_cfg[dl_cfg_idx].offset[tx];
+                               sai->dma_params_rx.maxburst = FSL_SAI_MAXBURST_RX * pins;
+                               sai->dma_params_rx.peripheral_config = &sai->audio_config[tx];
+                               sai->dma_params_rx.peripheral_size = sizeof(sai->audio_config[tx]);
                        }
                }
 
index fe6b06c..d3d43ff 100644 (file)
@@ -7,6 +7,7 @@
 #define __FSL_SAI_H
 
 #include <linux/pm_qos.h>
+#include <linux/platform_data/dma-imx.h>
 #include <sound/dmaengine_pcm.h>
 
 #define FSL_SAI_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
@@ -303,6 +304,7 @@ struct fsl_sai {
        struct fsl_sai_verid verid;
        struct fsl_sai_param param;
        struct pm_qos_request pm_qos_req;
+       struct sdma_audio_config audio_config[2];
        struct pinctrl *pinctrl;
        struct pinctrl_state *pins_state;
 };