|
@@ -95,7 +95,8 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
|
|
|
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
|
|
case SND_SOC_DAIFMT_I2S:
|
|
|
/* data on rising edge of bclk, frame low 1clk before data */
|
|
|
- strcr |= SSI_STCR_TFSI | SSI_STCR_TEFS | SSI_STCR_TXBIT0;
|
|
|
+ strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSI |
|
|
|
+ SSI_STCR_TEFS;
|
|
|
scr |= SSI_SCR_NET;
|
|
|
if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) {
|
|
|
scr &= ~SSI_I2S_MODE_MASK;
|
|
@@ -104,33 +105,31 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_LEFT_J:
|
|
|
/* data on rising edge of bclk, frame high with data */
|
|
|
- strcr |= SSI_STCR_TXBIT0;
|
|
|
+ strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP;
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_DSP_B:
|
|
|
/* data on rising edge of bclk, frame high with data */
|
|
|
- strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0;
|
|
|
+ strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSL;
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_DSP_A:
|
|
|
/* data on rising edge of bclk, frame high 1clk before data */
|
|
|
- strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0 | SSI_STCR_TEFS;
|
|
|
+ strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSL |
|
|
|
+ SSI_STCR_TEFS;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
/* DAI clock inversion */
|
|
|
switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
|
|
|
case SND_SOC_DAIFMT_IB_IF:
|
|
|
- strcr |= SSI_STCR_TFSI;
|
|
|
- strcr &= ~SSI_STCR_TSCKP;
|
|
|
+ strcr ^= SSI_STCR_TSCKP | SSI_STCR_TFSI;
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_IB_NF:
|
|
|
- strcr &= ~(SSI_STCR_TSCKP | SSI_STCR_TFSI);
|
|
|
+ strcr ^= SSI_STCR_TSCKP;
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_NB_IF:
|
|
|
- strcr |= SSI_STCR_TFSI | SSI_STCR_TSCKP;
|
|
|
+ strcr ^= SSI_STCR_TFSI;
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_NB_NF:
|
|
|
- strcr &= ~SSI_STCR_TFSI;
|
|
|
- strcr |= SSI_STCR_TSCKP;
|
|
|
break;
|
|
|
}
|
|
|
|