|
@@ -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);
|