[alsa-devel] [PATCH 2/3] ASoC: omap-mcbsp: change the DSP_B mode to DSP_A mode

Peter Ujfalusi peter.ujfalusi at nokia.com
Thu Apr 9 12:33:43 CEST 2009


On Thursday 09 April 2009 13:16:55 Ujfalusi Peter (Nokia-D/Tampere) wrote:
> On Thursday 09 April 2009 13:00:14 Nikula Jarkko (Nokia-D/Helsinki) wrote:
> > On Thu, 9 Apr 2009 11:34:41 +0200
> >
> > "Ujfalusi Peter (Nokia-D/Tampere)" <peter.ujfalusi at nokia.com> wrote:
> > > -	case SND_SOC_DAIFMT_DSP_B:
> > > +	case SND_SOC_DAIFMT_DSP_A:
> > >  		/* 0-bit data delay */
> > >  		regs->rcr2      |= RDATDLY(0);
> > >  		regs->xcr2      |= XDATDLY(0);
> > > --
> >
> > Are you absolutely sure on this? According to WM9713, it's the DSP_A
> > where MSB is valid after 1 bit clock period of the FS.
>
> I think this is correct. The data is going to be valid exactly the same
> way, as the WM9713 data sheet describes.
>
> As for the DSP_B mode: I think it can be implemented like this:
> Invert the frame sync polarity, Then:
> 	case SND_SOC_DAIFMT_DSP_B:
> 		regs->srgr2	|= FPER(wlen * channels - 1);
> 		regs->srgr1	|= FWID(0); /* FS pulse width is 1 */
> 		break;
>
> So the MSB will be in the correct place.

BTW: I have draw it to paper the following to verified these:
1) how mcbsp would operate with the osk5912 config (as it was):
	snd_soc_dai_set_fmt(codec_dai,
		SND_SOC_DAIFMT_DSP_B |
		SND_SOC_DAIFMT_NB_IF |
		SND_SOC_DAIFMT_CBM_CFM);

Than after the change:
2) how mcbsp would operate with the osk5912 config (my proposal):
        err = snd_soc_dai_set_fmt(codec_dai,
	snd_soc_dai_set_fmt(codec_dai,
		SND_SOC_DAIFMT_DSP_A |
		SND_SOC_DAIFMT_IB_IF |
		SND_SOC_DAIFMT_CBM_CFM);

3) how mcbsp would operate with the omap3beagle 4 channel mode:
	fmt =	SND_SOC_DAIFMT_DSP_A |
			SND_SOC_DAIFMT_IB_NF |
			SND_SOC_DAIFMT_CBM_CFM;

Than I compared these drawings to the pictures in the data sheets 
(tlv320aic32, twl4030):
1) Does not match at all
2) 100% match
3) 100% match

I think if the osk5912 wants to use the codec with DSP_B mode it should have:
	snd_soc_dai_set_fmt(codec_dai,
		SND_SOC_DAIFMT_DSP_B |
		SND_SOC_DAIFMT_NB_IF |
		SND_SOC_DAIFMT_CBM_CFM);

Than in omap-mcbsp:
 	case SND_SOC_DAIFMT_DSP_B:
 		regs->srgr2	|= FPER(wlen * channels - 1);
 		regs->srgr1	|= FWID(0); /* FS pulse width is 1 */
 		break;

Than it would have been correct, I think. Probably I should send the DSP_B 
support also in the series?

-- 
Péter


More information about the Alsa-devel mailing list