On 10-01-2024 04:45, Kuninori Morimoto wrote:
/-----> codec1 endpoint /
CPU endpoint \ -----> codec2 endpoint
It sounds "Single CPU - Mult Codec" connection, and if my understanding was correct, current ASoC is not supporting it so far.
Yes, this is a typical TDM use case. __soc_pcm_hw_params() call in soc-pcm.c loops over all CODECs for a given rtd. So is there something else you are referring to which makes ASoC core doesn't support it?
Oops sorry, I was confused. asymmetry Multi CPU/Codec is supported on ASoC / Card2 on for-6.8 branch.
Also the binding properties of "audio-graph-card2" seem to be different from "audio-graph-card". I am looking at a simpler extension of existing bindings for Tegra audio without having to re-write the whole bindings. If "remote-endpoint" can take phandle array it would be simpler from DT point of view.
Yes, "card2" and "card" are similar but different. I'm not DT-man, but I think remote-endpoint phandle array is not allowed ?
Yes, it is not allowed and there is DTC error. Exploring if there is an extension possible to allow phandle array.
If my understanding was correct, you need to use multi endpoint in such case instead of phandle array.
CPU port { cpu_endpoint0: endpoint@0 { remote-endpoint = <&codec1_endpoint>; }; cpu_endpoint1: endpoint@1 { remote-endpoint = <&codec2_endpoint>; }; };
Codec1 port { codec1_endpoint: endpoint { remote-endpoint = <&cpu_endpoint0>; }; };
Codec2 port { codec2_endpoint: endpoint { remote-endpoint = <&cpu_endpoint1>; }; };
This is a workaround. Note that CPU endpoint@1 doesn't exist and a dummy endpoint needs to be created. Like I mentioned in previous replies, the number of dummy endpoints that need to be created depends on how many CODECs user want to connect and it doesn't look scalable.