Hi Pierre-Louis
rtd->cpu_dais = [][][][][][][][][] rtd->codec_dais = [][][][][][][][][]
(snip)
rtd->dais = [][][][][][][][][][][][][][][][][][] ^cpu_dais ^codec_dais |--- num_cpus ---|--- num_codecs --|
(snip)
Is the end-goal to remove the cpu_dais and codec_dais, and fold them as non-descript 'dais'? This is what I understand by "it will be no longer good much for modern device"
Yes. We want to have non-descript DAIs in the future. I think this was indicated by Lars-Peter before at ELCE. But, I think we *can't* do it right now. Because many drivers are considering CPU and Codec separately.
Or is this 'merge' a simple data handling change to avoid using two "for" loops instead of one, and we are going to keep the distinction between dais?
Yes. There are some functions which is doing something only for CPU or Codec. This patch-set do nothing to such functions. Maybe it can be updated in the future, maybe not (can't).
I hope this patch-set can be 1st step for non-descript DAIs. But the main purpose of this patch so far is that keeping current CPU / Codec DAIs method, but, simply merge such code *if possible*.
more specifically I am concerned about the tons of code we have, e.g. a random machine driver:
struct snd_soc_dai *codec_dai = rtd->codec_dai; struct snd_soc_jack *jack; int ret;
/* Configure sysclk for codec */ ret = snd_soc_dai_set_sysclk(codec_dai, DA7219_CLKSRC_MCLK,
If the rtd structure only has an array of dais, how would the codecs be configured then?
The image is like this. It still can use rtd->cpu_dais, rtd->codec_dais. Of course for_each_rtd_cpu/codec_dais() macro too.
rtd->dais = [][][][][][][][][][][][][][][][][][] ^cpu_dais ^codec_dais |--- num_cpus ---|--- num_codecs --|
rtd->cpu_dais = &rtd->dais[0]; rtd->codec_dais = &rtd->dais[dai_link->num_cpus];
So we can use/keep existing code/method same as before. Is this good answer for you ?
Thank you for your help !!
Best regards --- Kuninori Morimoto