Hi Mark Brown, Looking back on my email notes, you helped me with this back in 2011 with an old kernel version. I wonder if mutlti-codec-on-single-DAI configuration is still unsupported by the ASOC core. I don't see anything obvious.
If I were to implement it 'properly', what's the right DTS format to go with? Something like what I suggest below (i.e. in the simple-audio-card section, use multiple codecs in a single sound-dai? If so, where should the tdm-slot & clocking information go? In the codec DTS section itself, or in the sound-dai section?
Thanks again, -Caleb
On Tue, Sep 8, 2015 at 6:02 PM, Caleb Crome caleb@crome.org wrote:
Hi all, What's the current best practices to specify multiple codecs on one sound card, with all codecs sharing a single TDM bus?
I have a card with up to 32 TLV320AIC33 codecs on it. For the moment, we can limit the discussion to only 16 codecs, so we don't have to get extra serializers involved...
I currently have something like this in my am335x-boneblack.dts file:
(i.e. attempting to set tdm slot width and num in the i2c codec)
but it doesn't seem to be pickin up the fact that I want all the codecs linked together as one.
(FYI, the first codec, i.e. tlv32aic3x_a should be the master, and all others including the CPU will be slaves).
Thanks for any help!
BTW, I'm happy to use whatever kernel will support me with the minimal amount of effort!
Sincerely, -Caleb
&i2c1 { clock-frequency = <100000>; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins_default>; status="okay";
tlv320aic3x_a: tlv320aic3x@18 { #sound-dai-cells = <0>; compatible = "ti,tlv320aic3x"; reg = <0x18>; status = "okay"; dai-tdm-slot-width = <16>; dai-tdm-slot-num = <0>; }; tlv320aic3x_b: tlv320aic3x@19 { #sound-dai-cells = <0>; compatible = "ti,tlv320aic3x"; reg = <0x19>; status = "okay"; dai-tdm-slot-width = <16>; dai-tdm-slot-num = <2>; }; tlv320aic3x_c: tlv320aic3x@1a { compatible = "ti,tlv320aic3x"; reg = <0x1a>; status = "okay"; dai-tdm-slot-width = <16>; dai-tdm-slot-num = <4>; }; tlv320aic3x_d: tlv320aic3x@1b { compatible = "ti,tlv320aic3x"; reg = <0x1b>; status = "okay"; dai-tdm-slot-width = <16>; dai-tdm-slot-num = <6>; }; };
sound { compatible = "simple-audio-card"; simple-audio-card,name = "puck audio"; // simple-audio-card,widgets= // simple-audio-card,routing= simple-audio-card,mclk-fs = <256>; status="okay"; simple-audio-card,bitclock-master = <&tlv320aic3x_a>; simple-audio-card,frame-master = <&tlv320aic3x_a>; simple-audio-card,dai-link@0 { format = "left_j"; cpu { sound-dai = <&mcasp0 0>; };
// *** Here's where I'm really confused -- this part doesn't seem to be supported to // have all the codecs on a single DAI. // The examples given seem to be for different codec DAIs // sharing a single CPU DAI, but not used at the same time.
codec { #sound-dai-cells = <0>; sound-dai = < &tlv320aic3x_a &tlv320aic3x_b &tlv320aic3x_c &tlv320aic3x_d >; }; }; };