On Mon, Mar 10, 2014 at 01:31:15PM +0200, Peter Ujfalusi wrote:
Exactly, CBM_CFM means that the codec is the master of both clocks. Codec is configured as master and the cpu side is configured as slave.
But the issue is that with simple card (when you want to have the codec as master for both clocks):
simple-audio-card,codec { sound-dai = <&aic3106>; bitclock-master; frame-master; };
simple-audio-card,cpu { sound-dai = <&mcasp1 0>; };
The codec will get CBM_CFM, however the cpu_dai will end up having CBS_CFS (since *-master is not specified in the dts).
What I would expect the code to be doing here is coming up with the same setting for both ends of the link rather than trying to parse the two ends of the link independently - though that *is* more flexible it's unlikely to actually work in a system. The properties on each end of the link aren't independent of each other.
So when the simple card parses the master/slave configuration it has to invert the cpu_dai settings it got back from snd_soc_of_parse_daifmt() to get it right.
Or there should just be one unified parse. When reading Jiri's mail the lack of any reference to the code it really sounded like he was asking for the result of a single parse to inverted between passing to the CODEC and CPU sides.
Needs looking at.