Port allocations are something like this:
RX: (Simple)
Port 1 -> HPH L/R
Port 2 -> CLASS H Amp
Port 3 -> COMP
Port 4 -> DSD.
TX: (This get bit more complicated)
Port 1: PCM
Port 2: ADC 1 & 2
Port 3: ADC 3 & 4
Port 4: DMIC-0, DMIC-1, DIMC-2 , DMIC-3 and MBHC
Port 5: DMIC-4, DMIC-5, DMIC-6 and DMIC-7
We handle the port allocation dynamically based on mixer and dapm
widgets in my code! Also channel allocations are different for each
function!
Sorry, I am not following here. What is dynamic here and use-case
dependent? And is this a mapping on the master or the codec sides that
you want to modify?
Does this help and can you align on what Intel started with?
Firstly, This is where the issue comes, if we go with the
suggested(dai->id) solution, we would end up with a long list of
dai-links with different combinations of both inputs/output connections
and usecases. Again we have to deal with limited DSP resources too!
Secondly, The check [1] in stream.c will not allow more than one master
port config to be added to master runtime. Ex: RX Port 1, 2, 3 is used
for Headset Playback.
I am confused here, we do have examples in existing codec drivers where
we use multiple ports for a single stream, e.g. for IV feedback we use 2
ports.
In your "RX Port 1, 2, 3" example, are you referring to the codec or the
master side? If it's for the codec, it's already supported, see e.g.
https://github.com/thesofproject/linux/pull/2514, we use DP2 and DP4 for
the same stream. This is done with the port_config capability.