|
@@ -241,10 +241,27 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
|
|
rcr = DAVINCI_MCBSP_RCR_RFRLEN1(1);
|
|
|
xcr = DAVINCI_MCBSP_XCR_XFIG | DAVINCI_MCBSP_XCR_XFRLEN1(1);
|
|
|
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
|
|
- case SND_SOC_DAIFMT_RIGHT_J:
|
|
|
+ case SND_SOC_DAIFMT_DSP_B:
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_I2S:
|
|
|
- case SND_SOC_DAIFMT_DSP_B:
|
|
|
+ /* Davinci doesn't support TRUE I2S, but some codecs will have
|
|
|
+ * the left and right channels contiguous. This allows
|
|
|
+ * dsp_a mode to be used with an inverted normal frame clk.
|
|
|
+ * If your codec is master and does not have contiguous
|
|
|
+ * channels, then you will have sound on only one channel.
|
|
|
+ * Try using a different mode, or codec as slave.
|
|
|
+ *
|
|
|
+ * The TLV320AIC33 is an example of a codec where this works.
|
|
|
+ * It has a variable bit clock frequency allowing it to have
|
|
|
+ * valid data on every bit clock.
|
|
|
+ *
|
|
|
+ * The TLV320AIC23 is an example of a codec where this does not
|
|
|
+ * work. It has a fixed bit clock frequency with progressively
|
|
|
+ * more empty bit clock slots between channels as the sample
|
|
|
+ * rate is lowered.
|
|
|
+ */
|
|
|
+ fmt ^= SND_SOC_DAIFMT_NB_IF;
|
|
|
+ case SND_SOC_DAIFMT_DSP_A:
|
|
|
rcr |= DAVINCI_MCBSP_RCR_RDATDLY(1);
|
|
|
xcr |= DAVINCI_MCBSP_XCR_XDATDLY(1);
|
|
|
break;
|