[alsa-devel] simple-audio-card and external dynamic clock

Emmanuel Fusté emmanuel.fuste at laposte.net
Mon Apr 4 23:56:16 CEST 2016


Le 24/03/2016 22:51, Emmanuel Fusté a écrit :
> Hello,
>
> I m very new to ASoC (and not native english speaker) so be indulgent ;-)
> The context  : am335x-boneblack.
> I want to drive simple I2S targets. With the ongoing developments, and 
> recent patches posted here, this is a very simple job for the 
> simple-audio-card machine driver even with fixed external master clock.
> I want to go further using a programmable external clock (si570) which 
> is not very complicated thanks to the CCF.
> But now I want to use the dynamic nature of this external master clock 
> (through CCF) to be able to generate 44.1khz AND 48 multiples of fs 
> which is not natively possible on the BBB because of integer fs 
> scaling only and/or no dedicated audio PLL.
> I know that the same could be achieved on the BBB with switching 
> between internal clock (24mhz) and external one (24.576mhz) gated by 
> GPIO1_27, but this is another story.
>
> Which direction is the right one ?
> - dedicated machine driver ?
> - or something more generic / reusable implemented in the 
> simple-audio-card drivers through helpers routines ?
> - or something else ?
>

Ok,

I did a little bit of homework and mailing list digging.
If I understand the "problem"  correctly, here we are:
- ASoc is now completely CCF aware
- McASP driver is not, but it is not a real problem in most use cases 
when we omit the possibilities offered by AHCLKX or if we use a static 
AHCLKX configuration.
My use case needs two different level of ccf work on the McASP driver:
First, a "basic" conversion to CCF to be able to use simple-audio-card, 
choosing the used clock (AHCLKX or AUXCLK) with the 
assigned-clocks/assigned-clock-parents standard DT properties as it 
seems to be the way to go (February discussion about selecting system 
clocks by ID ).
Next, a more advanced support for the external AHCLKX case, which could 
be driven by a programmable clock (clk_set_rate available). Most use 
cases would be covered by a 24mhz and 24.576mhz AHCLKX and the correct 
divisors sets as need by the McASP driver.
With more complexity, arbitrary I2S rate (with arbitrary AHCLKX) or 
better accuracy ( dynamic switching between internal AUXCLK @24mhz and 
external fixed AHCLKX @24.576mhz) could be achieved.
And no need for a machine driver, simple-audio-card would be sufficient.

Right ?

Emmanuel.


More information about the Alsa-devel mailing list