Multiple Audio Codecs on one Sound Card

Hi,
I am trying to integrated two audio codecs in same card.Below is my DT,

sound_card: sound {
        compatible = "nvidia,tegra-audio-t210ref";
        nvidia,model = "tegra-snd-t210ref";

        nvidia,num-codec-link = <2>;

        nvidia,audio-routing =
                "z IN1_L",  "LineIn-z",
                "z IN1_R",  "LineIn-z",
                "Headphone-x","x LOL",
                "Headphone-x", "x LOR";

        nvidia,xbar = <&tegra_axbar>;

        nvidia,dai-link-1 {
            link-name = "tlv320adc3101-capture-z";
            cpu-dai = <&tegra_i2s3>;
            codec-dai = <&tlv320adc3101>;
            cpu-dai-name = "I2S3";
            codec-dai-name = "tlv320adc3101-asi";
            format = "i2s";
            bitclock-slave;
            frame-slave;
            bitclock-noninversion;
            frame-noninversion;
            bit-format = "s16_le";
            bclk_ratio = <2>;
            srate = <44100>;
            num-channel = <2>;
            ignore_suspend;
            name-prefix = "z";
        };

        nvidia,dai-link-2 {
            link-name = "tlv320dac3120-playback-x";
            cpu-dai = <&tegra_i2s1>;
            codec-dai = <&tlv320dac3120>;
            cpu-dai-name = "I2S1";
            codec-dai-name = "tlv320dac3120-asi";
            format = "i2s";
            bitclock-slave;
            frame-slave;
            bitclock-noninversion;
            frame-noninversion;
            bit-format = "s16_le";
            bclk_ratio = <2>;
            srate = <44100>;
            num-channel = <2>;
            ignore_suspend;
            name-prefix = "x";
        };
    };

    i2c@7000c000 {
        status = "okay";
        tlv320dac3120: tlv320dac3120-codec.0-0018@18 {
              compatible = "ti,tlv320dac3120-codec";
              reg = <0x18>;
              status = "okay";
            };
        tlv320adc3101: tlv320adc3101-codec.0-001b@1b {
              compatible = "ti,tlv320adc3101-codec";
              reg = <0x1b>;
              status = "okay";
            };
                };

–>Previously i tried to integrated separate Audio Codecs on the card and it works fine.
–>But after integration of 2 audio codecs on the same card, we are getting trouble in i2c itself. Both the devices are not capable of doing i2c transactions.
Below is the logs while doing I2C transactions.,

[    5.299618] tegra-i2c 7000c000.i2c: arb lost in communicate to add 0x18
[    5.299690] tegra-i2c 7000c000.i2c: Un-recovered Arbitration lost

–> Also we are facing trouble in amixer. By running amixer we are getting

root@tegra-ubuntu:/home/ubuntu# amixer
[ 2409.320792] Invalid kcontrol name
amixer: Mixer default load error: Operation not permitted
root@tegra-ubuntu:/home/ubuntu#

–> But amixer controls is displaying the required information.
–> If we tried

root@tegra-ubuntu:/home/ubuntu# amixer -c 1 sset "ADMAIF1 Mux" "I2S3"
[ 2538.670756] Invalid kcontrol name
amixer: Mixer hw:1 load error: Operation not permitted
root@tegra-ubuntu:/home/ubuntu#

We are getting the above errors.As dai links are configured as required.

Thanks…!

Hi mohanprasath_12,
We don’t support it. Each codec has to be one individual sound card.

Hi Dane,
Its surprising to say that we added two codecs in same sound card and it works.
Here is the Device Tree changes,

sound_card: sound {
        compatible = "nvidia,tegra-audio-t210ref";
        nvidia,model = "tegra-snd-t210ref";

        nvidia,num-codec-link = <2>;

        nvidia,audio-routing =
                "z IN1_L",  "LineIn-z",
                "z IN1_R",  "LineIn-z",
                "Headphone-x","x LOL",
                "Headphone-x", "x LOR";

        nvidia,xbar = <&tegra_axbar>;

        nvidia,dai-link-1 {
            link-name = "tlv320adc3101-capture-z";
            cpu-dai = <&tegra_i2s3>;
            codec-dai = <&tlv320adc3101>;
            cpu-dai-name = "I2S3";
            codec-dai-name = "tlv320adc3101-asi";
            format = "i2s";
            bitclock-slave;
            frame-slave;
            bitclock-noninversion;
            frame-noninversion;
            bit-format = "s16_le";
            bclk_ratio = <2>;
            srate = <44100>;
            num-channel = <2>;
            ignore_suspend;
            name-prefix = "z";
        };

        nvidia,dai-link-2 {
            link-name = "tlv320dac3120-playback-x";
            cpu-dai = <&tegra_i2s1>;
            codec-dai = <&tlv320dac3120>;
            cpu-dai-name = "I2S1";
            codec-dai-name = "tlv320dac3120-asi";
            format = "i2s";
            bitclock-slave;
            frame-slave;
            bitclock-noninversion;
            frame-noninversion;
            bit-format = "s16_le";
            bclk_ratio = <2>;
            srate = <44100>;
            num-channel = <2>;
            ignore_suspend;
            name-prefix = "x";
        };
    };

Hi mohanprasath_12,
We don’t have the experience internally. Good to hear the good news.