[alsa-devel] Remove clkdiv and pll setters from pxa dais
Daniel Mack
daniel at zonque.org
Wed May 30 10:35:25 CEST 2018
Hi,
As discussed in the simple-card thread the other day, the .set_clkdiv
and .set_pll callbacks for DAIs are considered legacy. In order to
support PXA platforms with DT, we need get rid of those for the DAIs of
PXA hardware.
On the good side, pxa-ssp is the only problematic one of the PXA dais,
the ac97, i2s don't have any special clocking knbos, and the mmp-sspa
should be straight forward to fix.
I looked into pxa-ssp and it seems the conversion to calculate the audio
clock dividers automatically seems doable.
There are currently 4 platforms that use this cpu dai in mainline that
also use snd_soc_dai_set_pll() or snd_soc_dai_set_clkdiv():
* Zylonite
* Brownstone
* Magician
* Raumfeld
I can test modifications on the latter one, but for the others, I need
to understand what the machine drivers are doing, and there are some
bits I don't grok.
For instance, code for Zylonite does this:
/* Add 1 to the width for the leading clock cycle */
pll_out = rate * (width + 1) * 8;
The commit which introduced these lines dates back to 2009 and was done
by you, Mark. Can you remember what the reason for this was? I've never
seen sample frames with 17 bits :) This is a setup that we can't
generically describe through .hw_params() or .dai_fmt() in the cpu dai,
correct?
In the magician code, you'll find this:
case 22050:
acps = 5622000;
switch (width) {
case 16:
/* 702750 Hz ~= 22050 Hz * 32 (-0.41%) */
acds = PXA_SSP_CLK_AUDIO_DIV_2;
break;
default: /* 32 */
/* 1405500 Hz ~= 22050 Hz * 64 (-0.41%) */
acds = PXA_SSP_CLK_AUDIO_DIV_1;
}
break;
case 44100:
acps = 5622000;
switch (width) {
case 16:
/* 1405500 Hz ~= 44100 Hz * 32 (-0.41%) */
acds = PXA_SSP_CLK_AUDIO_DIV_2;
break;
default: /* 32 */
/* 2811000 Hz ~= 44100 Hz * 64 (-0.41%) */
acds = PXA_SSP_CLK_AUDIO_DIV_1;
}
break;
So for both 22050 and 44100, the base frequency and all dividers are the
same, which can't be right. I assume these rates have never been used.
I'll ignore this and implement the table in the datasheet which should
do the right thing. Philipp?
What we need, however, is a way to describe whether the dai is mclk
master or slave. Would we add a DT propery for that?
Thanks,
Daniel
More information about the Alsa-devel
mailing list