On 10/10/2019 15:01, Pierre-Louis Bossart wrote:
It's been a while since this thread started, and I still don't quite get the concepts or logic.
First, I don't understand what the problem with "aux" devices is. All the SoundWire stuff is based on the concept of DAI, so I guess I am
That is the actual problem! Some aux devices does not have dais.
Usually aux devices are used for things like analog amplifiers that clearly don't have a digital interface, thus it really makes no sense to have a DAI link connecting them. So I guess my question here would be what is the thinking on making the "smart amplifier" dailess? It feels like having a CODEC to CODEC DAI between the CODEC and the AMP would be a more obvious way to connect the two devices and would presumably avoid the issues being discussed around the patch.
Ah, now I get it, I missed the point about not having DAIs for the amplifier.
I will second Charles' point, the code you have in the machine driver at
I agree with Charles,
WSA8810/WSA8815 is connected via SoundWire digital interface, so I can try to model this amplifier with dais and see how it ends up.
I still need to figure out prefixing multiple instances of this Amplifier controls with "Left" and "Right"
[1] gets a SoundWire stream context from the SLIMbus codec dai. It's a bit odd to mix layers this way.
Yep we have a very mixed setup on this SoC.
So it looks like this. Main WCD934X Codec which is connected via SLIMBus which has SoundWire Controller block along with other analog + digital blocks. Again the SoundWire Controller from that WCD934X codec is wired up to WSA881X Smart speaker amplifiers.
And if I look at the code below, taken from [1], if you have more than one codec, then your code looks problematic: data->sruntime would be overriden and you'd use the info from the last codec dai on the dailink...
This code has been written very much specific to DB845c which has only one codec. But I agree with your point.
--srini
case SLIMBUS_0_RX...SLIMBUS_6_TX: for (i = 0 ; i < dai_link->num_codecs; i++) { [snip] data->sruntime[cpu_dai->id] = snd_soc_dai_get_sdw_stream(rtd->codec_dais[i], 0); << same destination for multiple codec_dais...
If you keep the amp dai-less, then the stream concept should be somehow allocated on the master (or machine) side and passed to the codec dais that are associated to the same 'stream'.
[1] https://git.linaro.org/people/srinivas.kandagatla/linux.git/tree/sound/soc/q...