From ad51f765447f55699e3280086b32502f9a391345 Mon Sep 17 00:00:00 2001 From: Jarkko Nikula Date: Fri, 30 Sep 2011 10:55:33 +0300 Subject: [PATCH] ASoC: Davinci: Fix FS polarity for I2S format Commit 75d9ac4 ("ASoC: Allow DAI formats to be specified in the dai_link") changed DAI format flag values and we cannot simply invert anymore e.g. frame-sync with ^= SND_SOC_DAIFMT_NB_IF (which was anyway misuse) as there is no anymore fixed bit position for bit-clock or frame-sync inversion. Fix this by relying only on DAI format flag values passed to us and by not making any assumption on individual bit positions Signed-off-by: Jarkko Nikula Cc: Vaibhav Bedia Cc: Sekhar Nori Cc: Kevin Hilman Signed-off-by: Mark Brown --- sound/soc/davinci/davinci-i2s.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-i2s.c index d0d60b8a54d4..300e12118c00 100644 --- a/sound/soc/davinci/davinci-i2s.c +++ b/sound/soc/davinci/davinci-i2s.c @@ -265,6 +265,7 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai, struct davinci_mcbsp_dev *dev = snd_soc_dai_get_drvdata(cpu_dai); unsigned int pcr; unsigned int srgr; + bool inv_fs = false; /* Attention srgr is updated by hw_params! */ srgr = DAVINCI_MCBSP_SRGR_FSGM | DAVINCI_MCBSP_SRGR_FPER(DEFAULT_BITPERSAMPLE * 2 - 1) | @@ -330,7 +331,7 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai, * more empty bit clock slots between channels as the sample * rate is lowered. */ - fmt ^= SND_SOC_DAIFMT_NB_IF; + inv_fs = true; case SND_SOC_DAIFMT_DSP_A: dev->mode = MOD_DSP_A; break; @@ -394,6 +395,8 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai, default: return -EINVAL; } + if (inv_fs == true) + pcr ^= (DAVINCI_MCBSP_PCR_FSXP | DAVINCI_MCBSP_PCR_FSRP); davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_SRGR_REG, srgr); dev->pcr = pcr; davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_PCR_REG, pcr); -- 2.39.5