aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/davinci/davinci-i2s.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-i2s.c
index 24fe9db2c75e..51ceded8a245 100644
--- a/sound/soc/davinci/davinci-i2s.c
+++ b/sound/soc/davinci/davinci-i2s.c
@@ -241,10 +241,27 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
241 rcr = DAVINCI_MCBSP_RCR_RFRLEN1(1); 241 rcr = DAVINCI_MCBSP_RCR_RFRLEN1(1);
242 xcr = DAVINCI_MCBSP_XCR_XFIG | DAVINCI_MCBSP_XCR_XFRLEN1(1); 242 xcr = DAVINCI_MCBSP_XCR_XFIG | DAVINCI_MCBSP_XCR_XFRLEN1(1);
243 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { 243 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
244 case SND_SOC_DAIFMT_RIGHT_J: 244 case SND_SOC_DAIFMT_DSP_B:
245 break; 245 break;
246 case SND_SOC_DAIFMT_I2S: 246 case SND_SOC_DAIFMT_I2S:
247 case SND_SOC_DAIFMT_DSP_B: 247 /* Davinci doesn't support TRUE I2S, but some codecs will have
248 * the left and right channels contiguous. This allows
249 * dsp_a mode to be used with an inverted normal frame clk.
250 * If your codec is master and does not have contiguous
251 * channels, then you will have sound on only one channel.
252 * Try using a different mode, or codec as slave.
253 *
254 * The TLV320AIC33 is an example of a codec where this works.
255 * It has a variable bit clock frequency allowing it to have
256 * valid data on every bit clock.
257 *
258 * The TLV320AIC23 is an example of a codec where this does not
259 * work. It has a fixed bit clock frequency with progressively
260 * more empty bit clock slots between channels as the sample
261 * rate is lowered.
262 */
263 fmt ^= SND_SOC_DAIFMT_NB_IF;
264 case SND_SOC_DAIFMT_DSP_A:
248 rcr |= DAVINCI_MCBSP_RCR_RDATDLY(1); 265 rcr |= DAVINCI_MCBSP_RCR_RDATDLY(1);
249 xcr |= DAVINCI_MCBSP_XCR_XDATDLY(1); 266 xcr |= DAVINCI_MCBSP_XCR_XDATDLY(1);
250 break; 267 break;