On Fri, Jan 23, 2015 at 07:34:56PM +0100, Jean-Francois Moine wrote:
A card builder is a device which
- scans the graph of ports,
- fills the struct snd_soc_card according to the links between the ports and their properties,
- and, eventually, calls snd_soc_register_card().
The simple card builder, 'dt-card' (maybe a better name would have been 'graph-card'), acts just like the simple-card except that it does not appear in the DT. Its creation is done by an audio controller.
Which audio controller? There may be several CPU side audio interfaces in the same card. For example people often want to have both low latency and high latency audio paths from the CPU into the hardware (low latency tends to increase power burn). SoC centric system designs do sometimes also have PDM I/O, expecting to be directly connected to DMICs and so on, which results in a relatively large number of CPU interfaces.
With a DT graph, each CPU/CODEC would know exactly the widgets and routes it has to define.
Which widgets/routes do you mean?
Well, forget about this. I never clearly understood why some widgets and routes had to be defined at card level.
Please do try to understand the idea of representing simple components on the board and analogue interconects between devices - it's really important and not something that can be neglected.
I'd agree if this was some kind of kernel internal stuff, but this is creating ABI and we have to maintain it forever. Rushing this in without proper discussion and consideration of the more complex use-cases is in my opinion not a good idea.
Using a graph of port to describe the audio subsystem has been pushed forwards by many people for a long time, as shown by the creation of the document Documentation/devicetree/bindings/graph.txt.
That DT binding was done entirely in the context of video applications IIRC, this is the first time it's been discussed in this context.