Patch "ASoC: fsl_sai: Don't disable bitclock for i.MX8MP" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ASoC: fsl_sai: Don't disable bitclock for i.MX8MP

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     asoc-fsl_sai-don-t-disable-bitclock-for-i.mx8mp.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit c4cce292c39da98ee276aa00288bad14ac393569
Author: Shengjiu Wang <shengjiu.wang@xxxxxxx>
Date:   Tue Sep 19 17:42:13 2023 +0800

    ASoC: fsl_sai: Don't disable bitclock for i.MX8MP
    
    [ Upstream commit 197c53c8ecb34f2cd5922f4bdcffa8f701a134eb ]
    
    On i.MX8MP, the BCE and TERE bit are binding with mclk
    enablement, if BCE and TERE are cleared the MCLK also be
    disabled on output pin, that cause the external codec (wm8960)
    in wrong state.
    
    Codec (wm8960) is using the mclk to generate PLL clock,
    if mclk is disabled before disabling PLL, the codec (wm8960)
    won't generate bclk and frameclk when sysclk switch to
    MCLK source in next test case.
    
    The test case:
    $aplay -r44100 test1.wav (PLL source)
    $aplay -r48000 test2.wav (MCLK source)
    aplay: pcm_write:2127: write error: Input/output error
    
    Fixes: 269f399dc19f ("ASoC: fsl_sai: Disable bit clock with transmitter")
    Signed-off-by: Shengjiu Wang <shengjiu.wang@xxxxxxx>
    Link: https://lore.kernel.org/r/1695116533-23287-1-git-send-email-shengjiu.wang@xxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index 08a33832f6b3f..96fd9095e544b 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -710,10 +710,15 @@ static void fsl_sai_config_disable(struct fsl_sai *sai, int dir)
 {
 	unsigned int ofs = sai->soc_data->reg_offset;
 	bool tx = dir == TX;
-	u32 xcsr, count = 100;
+	u32 xcsr, count = 100, mask;
+
+	if (sai->soc_data->mclk_with_tere && sai->mclk_direction_output)
+		mask = FSL_SAI_CSR_TERE;
+	else
+		mask = FSL_SAI_CSR_TERE | FSL_SAI_CSR_BCE;
 
 	regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
-			   FSL_SAI_CSR_TERE | FSL_SAI_CSR_BCE, 0);
+			   mask, 0);
 
 	/* TERE will remain set till the end of current frame */
 	do {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux