Hi Pierre-Louis
Thank you for your feedback and report
> On some Chromebooks, we tag a dailink as supporting capture for echo
> reference, but that echo reference is generated by the Intel firmware.
> The amplifiers only support playback.
>
> see https://github.com/thesofproject/linux/pull/4937 for details, I
> added a clear log:
>
> [ 807.304740] kernel: SSP1-Codec: CPU dai SSP1 Pin supports capture
> but codec DAI rt1011-aif does not
>
> So I think for now we probably want to avoid this stricter criterion and
> only check the supported direction with the cpu-dais. Or we add an
> escape mechanism to let the core know that the capture support was
> intentional.
I think my patch have escape mechanism, but it was for BE Codec.
If my understand was correct, above is FE Codec ?
One question is that is it just a mistake (no one noticed) ? or is there
some reasons it can't support capture (but use it ?). If it was just a
mistake, is it possible to update driver during the grace time ?
Or do you think we need "escape mechanism" permanently ?
> I agree with your analysis. We don't have a clear memory/understanding
> of which "no_chan_DAI" platforms (B) was supposed to handle, and why no
> one reported them as broken by (C).
(snip)
> I am good with that plan, but I'll need to investigate first why we had
> a failure with one of the Chromebooks on this v3 patchset. That may give
> us some insights on "special" uses of those flags.
Thanks.
It seems the code was just complicated, and we have been missing
important check. Let's break out my patch-set into small pieces,
and go more slowly.
I think it will be like below. Can you agree about this ?
Step1
dpcm_xxx flag will be "option flag" instead of "mandatory flag"
for a while to keep compatibility and avoide confusion.
But it will be removed in Step3. To indicate such things,
it will have dev_warn() if dpcm_xxx flag was used. like below
if (rtd->dai_link->dynamic || rtd->dai_link->no_pcm) {
has_playback = /* at least one of CPU DAI supports playback */
has_capture = ...
if (!playback && rtd->dai_link->dpcm_playback) {
dev_warn(dev, "Playback is requested, but CPU doesn't support it\n")
has_playback = 1;
}
...
Step2 (In case of "escape mechanism" is not needed)
Current DPCM is checking CPU side only. Indicate warning until
Step4 if Codec is not match . warning only, not error for a while.
if (rtd->dai_link->dynamic || rtd->dai_link->no_pcm) {
...
if (has_playback && /* no Codec DAI supports playback */)
dev_warn(dev, "Playback is requested, but Codec doesn't support it\n")
...
Step3
Step1 deadline
remove dpcm_xxx flag
Step4
Step2 deadline
CPU / Codec mismatch will be error.
It will be "at least one of CPU/Codec pair supports playback/capture"
Step5
There is no big diff between DPCM / non-DPCM check.
Merge these, and clean-up code (soc_get_playback_capture())
Thank you for your help !!
Best regards
---
Renesas Electronics
Ph.D. Kuninori Morimoto
[Index of Archives]
[Pulseaudio]
[Linux Audio Users]
[ALSA Devel]
[Fedora Desktop]
[Fedora SELinux]
[Big List of Linux Books]
[Yosemite News]
[KDE Users]