forked from Minki/linux
ASoC: OMAP: Use single-phase for DSP mode
Use single-phase mode for the DSP mode and keep the dual phase mode for the I2S mode. The mono (1 channel) mode already used single phase mode, now it is more cleaner. There is no need to configure the second phase, when the single phase is used. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> Acked-by: Jarkko Nikula <jarkko.nikula@nokia.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
0d960e8891
commit
c29b206ffd
@ -214,8 +214,9 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
|
||||
struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
|
||||
struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs;
|
||||
int dma, bus_id = mcbsp_data->bus_id, id = cpu_dai->id;
|
||||
int wlen, channels;
|
||||
int wlen, channels, wpf;
|
||||
unsigned long port;
|
||||
unsigned int format;
|
||||
|
||||
if (cpu_class_is_omap1()) {
|
||||
dma = omap1_dma_reqs[bus_id][substream->stream];
|
||||
@ -243,18 +244,23 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
|
||||
return 0;
|
||||
}
|
||||
|
||||
channels = params_channels(params);
|
||||
format = mcbsp_data->fmt & SND_SOC_DAIFMT_FORMAT_MASK;
|
||||
wpf = channels = params_channels(params);
|
||||
switch (channels) {
|
||||
case 2:
|
||||
/* Use dual-phase frames */
|
||||
regs->rcr2 |= RPHASE;
|
||||
regs->xcr2 |= XPHASE;
|
||||
if (format == SND_SOC_DAIFMT_I2S) {
|
||||
/* Use dual-phase frames */
|
||||
regs->rcr2 |= RPHASE;
|
||||
regs->xcr2 |= XPHASE;
|
||||
/* Set 1 word per (McBSP) frame for phase1 and phase2 */
|
||||
wpf--;
|
||||
regs->rcr2 |= RFRLEN2(wpf - 1);
|
||||
regs->xcr2 |= XFRLEN2(wpf - 1);
|
||||
}
|
||||
case 1:
|
||||
/* Set 1 word per (McBSP) frame */
|
||||
regs->rcr2 |= RFRLEN2(1 - 1);
|
||||
regs->rcr1 |= RFRLEN1(1 - 1);
|
||||
regs->xcr2 |= XFRLEN2(1 - 1);
|
||||
regs->xcr1 |= XFRLEN1(1 - 1);
|
||||
/* Set word per (McBSP) frame for phase1 */
|
||||
regs->rcr1 |= RFRLEN1(wpf - 1);
|
||||
regs->xcr1 |= XFRLEN1(wpf - 1);
|
||||
break;
|
||||
default:
|
||||
/* Unsupported number of channels */
|
||||
@ -276,9 +282,9 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
|
||||
}
|
||||
|
||||
/* Set FS period and length in terms of bit clock periods */
|
||||
switch (mcbsp_data->fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||
switch (format) {
|
||||
case SND_SOC_DAIFMT_I2S:
|
||||
regs->srgr2 |= FPER(wlen * 2 - 1);
|
||||
regs->srgr2 |= FPER(wlen * channels - 1);
|
||||
regs->srgr1 |= FWID(wlen - 1);
|
||||
break;
|
||||
case SND_SOC_DAIFMT_DSP_B:
|
||||
|
Loading…
Reference in New Issue
Block a user