ASoC: fsl_sai: separate 'is_dsp_mode' for tx and rx
authorShengjiu Wang <shengjiu.wang@nxp.com>
Fri, 28 Mar 2025 08:57:43 +0000 (16:57 +0800)
committerMark Brown <broonie@kernel.org>
Sun, 6 Apr 2025 22:23:28 +0000 (23:23 +0100)
The transmitter and receiver of SAI can be used for different dsp modes,
then 'is_dsp_mode' needs to be separated.

Expand 'is_dsp_mode' to array 'is_dsp_mode[]' to support different
configuration of tx and rx.

Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://patch.msgid.link/20250328085744.1893434-4-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/fsl/fsl_sai.c
sound/soc/fsl/fsl_sai.h

index 9a450fc86dba7929dffca8e18abc804be0ff5114..09054e339b31ea0af3a54261e43170b94bfc6170 100644 (file)
@@ -287,7 +287,7 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai *cpu_dai,
                val_cr4 |= FSL_SAI_CR4_MF;
 
        sai->is_pdm_mode = false;
-       sai->is_dsp_mode = false;
+       sai->is_dsp_mode[tx] = false;
        /* DAI mode */
        switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
        case SND_SOC_DAIFMT_I2S:
@@ -316,7 +316,7 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai *cpu_dai,
                 */
                val_cr2 |= FSL_SAI_CR2_BCP;
                val_cr4 |= FSL_SAI_CR4_FSE;
-               sai->is_dsp_mode = true;
+               sai->is_dsp_mode[tx] = true;
                break;
        case SND_SOC_DAIFMT_DSP_B:
                /*
@@ -324,7 +324,7 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai *cpu_dai,
                 * frame sync asserts with the first bit of the frame.
                 */
                val_cr2 |= FSL_SAI_CR2_BCP;
-               sai->is_dsp_mode = true;
+               sai->is_dsp_mode[tx] = true;
                break;
        case SND_SOC_DAIFMT_PDM:
                val_cr2 |= FSL_SAI_CR2_BCP;
@@ -607,7 +607,7 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,
                }
        }
 
-       if (!sai->is_dsp_mode && !sai->is_pdm_mode)
+       if (!sai->is_dsp_mode[tx] && !sai->is_pdm_mode)
                val_cr4 |= FSL_SAI_CR4_SYWD(slot_width);
 
        val_cr5 |= FSL_SAI_CR5_WNW(slot_width);
index 0e25e2fc7ce0da9929b842cce5835bfd9b5bf55b..3f9357da0d8f67a232af5e58ce873d9d1a593c3f 100644 (file)
@@ -286,7 +286,7 @@ struct fsl_sai {
 
        bool is_consumer_mode[2];
        bool is_lsb_first;
-       bool is_dsp_mode;
+       bool is_dsp_mode[2];
        bool is_pdm_mode;
        bool is_multi_fifo_dma;
        bool synchronous[2];