Custom carrier board audio I2S2

I have designed a custom carrier board, I’m trying to play audio over I2S2 port using a TAS5805MPWPR amplifier.
My carrier board doesn’t have the Realtek ALC5658 codec so the card tegrasndt19xmob is missing.
How can I route the audio directly into the I2S2 port without using the card tegrasndt19xmob

Have a check this document help on it.

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/asoc_driver.19.1.html#

I’ve compiled and enabled the driver on the kernel. I’ve changed the sound section on dtb as follows:

sound {
        compatible = "simple-audio-card";
        pinctrl-names = "default";
        simple-audio-card,name = "Simple Audio";
        simple-audio-card,format = "i2s";
        simple-audio-card,widgets = "Speaker", "Speakers";
        simple-audio-card,routing = "Speakers", "Speaker";
        simple-audio-card,bitclock-master = <&cpu_dai>;
        simple-audio-card,frame-master = <&cpu_dai>;

        cpu_dai: simple-audio-card,cpu {
        sound-dai = <0x42>;
        };

        codec_dai: simple-audio-card,codec {
        sound-dai = <&codec_tas>;
        };
    };

I’ve also tried:
sound {
compatible = “ti,tas5805m”;
simple-audio-card,name = “Tas-Sound-Card”;
simple-audio-card,format = “i2s”;
simple-audio-card,bitclock-master = <&dailink0_master>;
simple-audio-card,frame-master = <&dailink0_master>;
simple-audio-card,widgets =“Speaker”, “External Speaker”;
simple-audio-card,routing =“External Speaker”, “LINE_OUT”;

    dailink0_master: ti,tas5805m {
        sound-dai = <&tas5805m>;
        clocks = <0x04 0x5d 0x04 0x68 0x04 0x04 0x04 0x07>;
        };

    nvidia,dai-link-0 {
        link-name = "tas5805m-amplifier";
        cpu-dai = <0x42>;
        codec-dai = <&tas5805m>;
        cpu-dai-name = "I2S2";
        codec-dai-name = "tas5805m";
        format = "i2s";
        bitclock-master;
        frame-master;
        bit-format = "s16_le";
        name-prefix = "z";
    };
};

I cannot get any new card under /proc/asound/cards/ so I don’t know how to route the audio to the I2S without using tegrasndt19xmob.

Does it necessary to make changes to the file?
/Linux_for_Tegra/rootfs/usr/share/alsa/init/postinit/01-tegra-rt565x.conf

Hi andresxrme8

Do you have any preference with respect to the machine driver you want to use? Note that “simple-audio-card” machine driver is not supported on Jetson.

It seems like you are combining “simple-audio-card” and Jetson specific machine driver bindings. This looks incorrect.

Please refer custom audio card section to enable sound card with your custom codec TAS5805

Please try above and let me know if you have further questions.

Thanks,
Sameer.

I make it work modifying the sound node as follows:

sound {
		iommus = <0x02 0x1e>;
		dma-mask = <0x00 0x5e000000>;
		iommu-resv-regions = <0x00 0x00 0x00 0x40000000 0x00 0x60000000 0xffffffff 0xffffffff>;
		iommu-group-id = <0x02>;
		status = "okay";
		nvidia,num-codec-link = <0x01>;
		nvidia,num-clk = <0x08>;
		nvidia,clk-rates = <0x10266000 0xac4400 0x2b11000 0x2b11000 0xea60000 0xbb8000 0x2ee0000 0x2ee0000>;
		nvidia,xbar = <0x3f>;
		compatible = "nvidia,tegra-audio-t186ref-mobile-rt565x";
		nvidia,model = "tegra-snd-t19x-mobile-rt565x";
		clocks = <0x04 0x5d 0x04 0x68 0x04 0x04 0x04 0x07>;
		clock-names = "pll_a\0pll_a_out0\0ahub\0extern1";
		assigned-clocks = <0x04 0x68 0x04 0x04 0x04 0x07>;
		assigned-clock-parents = <0x04 0x5d 0x04 0x68 0x04 0x68>;
		nvidia,audio-routing =  "y Headphone\0y OUT\0y IN\0y Mic";
		mclk-fs = <0x100>;
		linux,phandle = <0xf1>;
		phandle = <0xf1>;

	
		nvidia,dai-link-1 {
			link-name = "spdif-dit-1";
			cpu-dai = <0x42>;
			codec-dai = <0x43>;
			cpu-dai-name = "I2S2";
			codec-dai-name = "dit-hifi";
			format = "i2s";
			bit-format = "s16_le";
			srate = <0xbb80>;
			num-channel = <0x02>;
			ignore_suspend;
			name-prefix = [79 00];
			status = "okay";
			linux,phandle = <0xef>;
			phandle = <0xef>;
		};		
		
	};