|
@@ -191,6 +191,11 @@ static int omap_mcbsp_dai_trigger(struct snd_pcm_substream *substream, int cmd,
|
|
|
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
|
|
mcbsp_data->active++;
|
|
|
omap_mcbsp_start(mcbsp_data->bus_id, play, !play);
|
|
|
+ /* Make sure data transfer is frame synchronized */
|
|
|
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
|
|
+ omap_mcbsp_xmit_enable(mcbsp_data->bus_id, 1);
|
|
|
+ else
|
|
|
+ omap_mcbsp_recv_enable(mcbsp_data->bus_id, 1);
|
|
|
break;
|
|
|
|
|
|
case SNDRV_PCM_TRIGGER_STOP:
|
|
@@ -336,11 +341,15 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
|
|
/* 1-bit data delay */
|
|
|
regs->rcr2 |= RDATDLY(1);
|
|
|
regs->xcr2 |= XDATDLY(1);
|
|
|
+ regs->rccr |= RFULL_CYCLE | RDMAEN | RDISABLE;
|
|
|
+ regs->xccr |= (DXENDLY(1) | XDMAEN | XDISABLE);
|
|
|
break;
|
|
|
case SND_SOC_DAIFMT_DSP_A:
|
|
|
/* 1-bit data delay */
|
|
|
regs->rcr2 |= RDATDLY(1);
|
|
|
regs->xcr2 |= XDATDLY(1);
|
|
|
+ regs->rccr |= RFULL_CYCLE | RDMAEN | RDISABLE;
|
|
|
+ regs->xccr |= (DXENDLY(1) | XDMAEN | XDISABLE);
|
|
|
/* Invert FS polarity configuration */
|
|
|
temp_fmt ^= SND_SOC_DAIFMT_NB_IF;
|
|
|
break;
|