[PATCH] ASoC: fsl_sai: Fix Bit Clock Polarity configurations
Li.Xiubo at freescale.com
Li.Xiubo at freescale.com
Fri Apr 4 18:37:00 EST 2014
> Subject: [PATCH] ASoC: fsl_sai: Fix Bit Clock Polarity configurations
>
> The BCP bit in TCR4/RCR4 register rules as followings:
> 0 Bit clock is active high with drive outputs on rising edge
> and sample inputs on falling edge.
> 1 Bit clock is active low with drive outputs on falling edge
> and sample inputs on rising edge.
>
> For all formats currently supported in the fsl_sai driver, they're exactly
> sending data on the falling edge and sampling on the rising edge.
>
> However, the driver clears this BCP bit for all of them which results click
> noise when working with SGTL5000 and big noise with WM8962.
>
> Thus this patch corrects the BCP settings for all the formats here to fix
> the nosie issue.
>
> Signed-off-by: Nicolin Chen <Guangyu.Chen at freescale.com>
> ---
Good catch.
Acked-by: Xiubo Li <Li.Xiubo at freescale.com>
Thanks,
--
BRs,
Xiubo
> sound/soc/fsl/fsl_sai.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
> index 99051c7..9bbebea 100644
> --- a/sound/soc/fsl/fsl_sai.c
> +++ b/sound/soc/fsl/fsl_sai.c
> @@ -180,7 +180,7 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai
> *cpu_dai,
> * that is, together with the last bit of the previous
> * data word.
> */
> - val_cr2 &= ~FSL_SAI_CR2_BCP;
> + val_cr2 |= FSL_SAI_CR2_BCP;
> val_cr4 |= FSL_SAI_CR4_FSE | FSL_SAI_CR4_FSP;
> break;
> case SND_SOC_DAIFMT_LEFT_J:
> @@ -188,7 +188,7 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai
> *cpu_dai,
> * Frame high, one word length for frame sync,
> * frame sync asserts with the first bit of the frame.
> */
> - val_cr2 &= ~FSL_SAI_CR2_BCP;
> + val_cr2 |= FSL_SAI_CR2_BCP;
> val_cr4 &= ~(FSL_SAI_CR4_FSE | FSL_SAI_CR4_FSP);
> break;
> case SND_SOC_DAIFMT_DSP_A:
> @@ -198,7 +198,7 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai
> *cpu_dai,
> * that is, together with the last bit of the previous
> * data word.
> */
> - val_cr2 &= ~FSL_SAI_CR2_BCP;
> + val_cr2 |= FSL_SAI_CR2_BCP;
> val_cr4 &= ~FSL_SAI_CR4_FSP;
> val_cr4 |= FSL_SAI_CR4_FSE;
> sai->is_dsp_mode = true;
> @@ -208,7 +208,7 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai
> *cpu_dai,
> * Frame high, one bit for frame sync,
> * frame sync asserts with the first bit of the frame.
> */
> - val_cr2 &= ~FSL_SAI_CR2_BCP;
> + val_cr2 |= FSL_SAI_CR2_BCP;
> val_cr4 &= ~(FSL_SAI_CR4_FSE | FSL_SAI_CR4_FSP);
> sai->is_dsp_mode = true;
> break;
> --
> 1.8.4
>
More information about the Linuxppc-dev
mailing list