On Fri, Mar 08, 2013 at 12:59:49, Mike Looijmans wrote:
I have 9 codecs connected, and the main problem to solve was to get the system to start ALL of them instead of just one.
I solved that by creating a "multiplex" codec, which in itself doesn't do anything. It exports a mixer where you can switch on/off the codecs you want to use, and it forwards all commands (_ops) to the codecs that are enabled. The serializer settings are sent to the asp driver as if they are TDM masks (using the bits to enable serializers instead).
In userland you see 10 codecs, you can use each separately, or use the 10th codec (the multiplexer) to use any combination of other codecs.
Interesting approach. I was thinking more on the lines of how to expose the different serializer-codec pairs to the core. Since there's only one DMA interface for the different serializers doing this in a generic manner looked complicated, at least to me.
I am aware of couple of multi-channel systems that preferred the approach that I mentioned. In one, a cascading of codecs was preferred so as to free up the extra serializer pads for different functions at the SoC level. There was a custom app to split the data coming in from different channels but since it freed up a few pads, this approach was preferred. In another, sending SPDIF data to an HDMI transmitter was preferred, again to free up some pads. It finally depends on what the use-case is and which system level constraints are more important to satisfy.
It would be good if you could post the changes that made so that we can discuss on how the approach in detail and possibly enhance the core to handle the multi-codec scenarios that use-cases like your require.
Regards, Vaibhav