On Mon, Jul 15, 2013 at 10:37:27PM +0100, Russell King - ARM Linux wrote:
On Mon, Jul 15, 2013 at 09:08:51PM +0100, Mark Brown wrote:
There's no obvious code that handles anything differently with extclk. Indeed if you think about it for a minute you'll realise there's no way the driver will ever use an extclk - set_rate() is badly implemented, look at how other drivers select between clocks.
Actually looking some more it's not actually a normal set_rate() call but rather something done transparently inside the driver - given that the automatic source selection is OK.
I suggest you go back and re-read the driver because it most certainly does use extclk. What makes you think it won't?
The only thing I can see which is pushing a constraint up the stack is KIRKWOOD_I2S_RATES in the DAIs which only allows 44.1kHz, 48kHz and 96kHz, the rates for which the internal clock is used. The driver will happily request the external clock and hold a reference to it but if there's code there to tell the upper layers that extra rates are supported I'm missing it and without that any attempt to use anything else should be rejected by the stack.
Note that regular ALSA will do some sample rate conversions in software automatically so if you're not testing with something like "aplay -Dhw:0,0" that bypasses those then the hardware may not be running at the same rate as the application.