[alsa-devel] [PATCH] ASoC - Add support for upto 16 channels on OMAP MCBSP

Jarkko Nikula jhnikula at gmail.com
Thu Nov 5 08:51:43 CET 2009


On Wed, 04 Nov 2009 19:46:49 +0000
Liam Girdwood <lrg at slimlogic.co.uk> wrote:

> > > +	/* calc best frame size for rate and clock divider */
> > > +	do {
> > > +		frame_size = (mcbsp_data->in_freq / div) / params_rate(params);
> > > +		pr_debug("freq %d, rate %d, frame size %d, div %d\n",
> > > +				mcbsp_data->in_freq, params_rate(params), frame_size, div);
> > > +
> > > +		if (frame_size > 256)
> > > +			div++;
> > > +	} while (frame_size > 256);
> > > +

This would be better if it tries to calculate minimum frame size. Now
the algorithm stops when the frame_size is 256 and leads to higher
bit clock.

E.g. 4 * 16bits * 48 kHz and using 96 MHz internal clock:

Algorithm: div = 8, frame_size = 250 and bit clock = 12 MHz.

Possible dividers and frame_sizes:

25*80 (-> best, bit clock = 3.840 MHz)
20*100
16*125
10*200
8*250

> > This chunk changes the semantics of other devices which I have never tested.
> > 
> > I also dont know how much damage it does if it does to slave mode. In fact
> > I think it might break it in cases which are actually allowable as it uses
> > the omap as its clock constraint and not the clock source.
> > 
> 
IRCC, the CLKGDV doesn't have effect while OMAP is slave but I can test
that with Beagle.

> Btw, this has been reworked to avoid all I2S paths since you last worked
> on it.
> 
Probably that is not necessary if the algorithm above finds a frame
size (½ for dual-phase frames) which doesn't exceed I2S word size?
Uniform code is allways better :-)


-- 
Jarkko


More information about the Alsa-devel mailing list