TLV320AIC3204 Audio Codec on AGX Orin EV Kit is not working

Hi,

I am working with the Jetson AGX Orin EV Kit (Jetson Linux R35.5.0) and integrating the TLV320AIC3204 audio codec via I2S and I2C. Below are the connection details:


I2S2 is configured through the 40-pin header
PinMux verification output:

evk@tegra-ubuntu:~$ sudo /opt/nvidia/jetson-io/config-by-function.py -l enabled | grep i2s2  
   2. i2s2 (12,35,38,40)  
  • Register dump of I2S2 pins:
    evk@tegra-ubuntu:~$ sudo busybox devmem 0x02434088 #SOC_GPIO41 - I2S2_SCLK  
    0x00001445  
    evk@tegra-ubuntu:~$ sudo busybox devmem 0x02434090 #SOC_GPIO42 - I2S2_SDATA_OUT  
    0x00000405  
    evk@tegra-ubuntu:~$ sudo busybox devmem 0x02434098 #SOC_GPIO43 - I2S2_SDATA_IN  
    0x00000455  
    evk@tegra-ubuntu:~$ sudo busybox devmem 0x024340a0 #SOC_GPIO44 - I2S2_LRCK  
    0x00000445  
    

Here is DT changes

                        /*I2S2 in Short frame sync for BT SCO */
                        i2s@2901100 {
                                status = "okay";
                        };
        /*Added Audio codec DT Changes*/
        i2c@c250000 {
                aic32x4: tlv320aic32x4.1-0018@18 {
                        compatible = "ti,tlv320aic32x4";
                        reg = <0x18>;

                        clocks = <&bpmp_clks TEGRA234_CLK_AUD_MCLK>;
                        clock-names = "mclk";
                        status = "okay";
                        dv-supply = <&battery_reg>;
                        av-supply = <&battery_reg>;
                        iov-supply = <&battery_reg>;


                        #sound-dai-cells = <1>;
                        sound-name-prefix = "tlv";

                };
        };
        //hdr40_i2c1: i2c@c250000 { };

        tegra_sound: sound {
                compatible = "nvidia,tegra186-ape";
                nvidia-audio-card,name = "NVIDIA Jetson AGX Orin APE";
                clocks = <&bpmp_clks TEGRA234_CLK_PLLA>,
                         <&bpmp_clks TEGRA234_CLK_PLLA_OUT0>,
                         <&bpmp_clks TEGRA234_CLK_AUD_MCLK>;
                clock-names = "pll_a", "pll_a_out0", "extern1";
                assigned-clocks = <&bpmp_clks TEGRA234_CLK_AUD_MCLK>;
                assigned-clock-parents = <&bpmp_clks TEGRA234_CLK_PLLA_OUT0>;

                        nvidia-audio-card,widgets =
                                "Line",         "tlv Line In",
                                "Headphone",    "tlv Headphone",
                                "Microphone",   "tlv Mic",
                                "Speaker",       "tlv Int Spk";
                        nvidia-audio-card,routing =
                                "tlv Headphone", "tlv LOR",
                                "tlv Headphone", "tlv LOL",
                                "tlv Headphone", "tlv HPR",
                                "tlv Headphone", "tlv HPL",
                                "tlv Left DAC", "tlv Playback",
                                "tlv Right DAC", "tlv Playback",
                                "tlv IN1_L", "tlv Mic",
                                "tlv IN1_R", "tlv Mic",
                                "tlv IN2_L", "tlv Mic",
                                "tlv IN2_R", "tlv Mic",
                                "tlv IN3_L", "tlv Mic",
                                "tlv IN3_R", "tlv Mic",
                                "tlv Capture", "tlv Left ADC",
                                "tlv Capture", "tlv Right ADC",
                                "tlv Line In", "tlv Left ADC",
                                "tlv Line In", "tlv Right ADC";
                        nvidia-audio-card,mclk-fs = <256>;
                        status = "okay";
        };

hdr40_snd_link_i2s: &i2s2_to_codec {
        link-name = "ti-capture";
        codec {
                sound-dai = <&aic32x4 0>;
                prefix = "tlv";
        };
 };


&i2s2_to_codec {
        status = "okay";
        link-name = "ti-capture";
        format = "dsp_a";
        name-prefix = "tlv";
        codec {
                sound-dai = <&aic32x4 0>;
                prefix = "tlv";

        };
};
   
  • Detected sound cards:
    evk@tegra-ubuntu:~$ cat /proc/asound/cards  
     0 [HDA            ]: tegra-hda - NVIDIA Jetson AGX Orin HDA  
                           NVIDIA Jetson AGX Orin HDA at 0x3518000 irq 118  
     1 [APE            ]: tegra-ape - NVIDIA Jetson AGX Orin APE  
                           NVIDIA Jetson AGX Orin APE  
    
amixer -c APE cset name="I2S1 Mux" "ADMAIF2"
amixer -c APE cset name="ADMAIF2 Mux" "I2S1"
amixer -c APE cset name="I2S1 Loopback" "on"
evk@tegra-ubuntu:~$ aplay -D hw:APE,1 ~/Downloads/file_example_WAV_10MG.wav & arecord -D hw:APE,1 -f S16_LE -c 2 -r 44100 my.wav -v
[1] 6107
Playing WAVE '/home/evk/Downloads/file_example_WAV_10MG.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Recording WAVE 'my.wav' : StereoSigned 16 bit Little Endian,
Rate 44100 Hz, Stereo
Hardware PCM card 1 'NVIDIA Jetson AGX Orin APE' device 1 subdevice 0
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 2
  rate         : 44100
  exact rate   : 44100 (44100/1)
  msbits       : 16
  buffer_size  : 8192
  period_size  : 2048
  period_time  : 46439
  tstamp_mode  : NONE
  tstamp_type  : MONOTONIC
  period_step  : 1
  avail_min    : 2048
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 8192
  silence_threshold: 0
  silence_size : 0
  boundary     : 4611686018427387904
  appl_ptr     : 0
  hw_ptr       : 0
^CAborted by signal Interrupt...
[1]+  Done                    aplay -D hw:APE,1 ~/Downloads/file_example_WAV_10MG.wav
evk@tegra-ubuntu:~$

The codec card is detected, but I’m not able to hear any audio output. (only noise) I have followed the forums and implemented the device tree changes. TLV320AIC3204 Driver will support for AGX Orin 64GB SOM?
Could you help identify what might be missing in the setup?
Here is the Dmesg log
dmesg.log (117.8 KB)

This is not correct as TLV codec is connected to I2S2 on 40 pin header as per your info provided.

Please use below connection along with codec related mixer controls

amixer -c APE cset name=“I2S2 Mux” “ADMAIF2”
amixer -c APE cset name=“ADMAIF2 Mux” “I2S2”
TLV codec related mixer controls like speaker unmute, volume path setting etc…
aplay -D hw:APE,1 ~/Downloads/file_example_WAV_10MG.wav

Am not sure why you have used “I2S1 Loopback” “on” , Loopback is required only for I2S level internal loopback testing. IF you plan to test TLV speaker you should not set this.

I previously ran this setup with I2S2, and here is the complete configuration.

After applying these settings, I can hear the noise but not the actual sound.

evk@tegra-ubuntu:~$ amixer -c APE cset name="I2S2 Mux" "ADMAIF2"
numid=1300,iface=MIXER,name='I2S2 Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=81
  ; Item #0 'None'
  ; Item #1 'ADMAIF1'
  ; Item #2 'ADMAIF2'
  ; Item #3 'ADMAIF3'
  ; Item #4 'ADMAIF4'
  ; Item #5 'ADMAIF5'
  ; Item #6 'ADMAIF6'
  ; Item #7 'ADMAIF7'
  ; Item #8 'ADMAIF8'
  ; Item #9 'ADMAIF9'
  ; Item #10 'ADMAIF10'
  ; Item #11 'ADMAIF11'
  ; Item #12 'ADMAIF12'
  ; Item #13 'ADMAIF13'
  ; Item #14 'ADMAIF14'
  ; Item #15 'ADMAIF15'
  ; Item #16 'ADMAIF16'
  ; Item #17 'I2S1'
  ; Item #18 'I2S2'
  ; Item #19 'I2S3'
  ; Item #20 'I2S4'
  ; Item #21 'I2S5'
  ; Item #22 'I2S6'
  ; Item #23 'SFC1'
  ; Item #24 'SFC2'
  ; Item #25 'SFC3'
  ; Item #26 'SFC4'
  ; Item #27 'MIXER1 TX1'
  ; Item #28 'MIXER1 TX2'
  ; Item #29 'MIXER1 TX3'
  ; Item #30 'MIXER1 TX4'
  ; Item #31 'MIXER1 TX5'
  ; Item #32 'AMX1'
  ; Item #33 'AMX2'
  ; Item #34 'AMX3'
  ; Item #35 'AMX4'
  ; Item #36 'ARAD1'
  ; Item #37 'AFC1'
  ; Item #38 'AFC2'
  ; Item #39 'AFC3'
  ; Item #40 'AFC4'
  ; Item #41 'AFC5'
  ; Item #42 'AFC6'
  ; Item #43 'OPE1'
  ; Item #44 'SPKPROT1'
  ; Item #45 'MVC1'
  ; Item #46 'MVC2'
  ; Item #47 'IQC1-1'
  ; Item #48 'IQC1-2'
  ; Item #49 'IQC2-1'
  ; Item #50 'IQC2-2'
  ; Item #51 'DMIC1'
  ; Item #52 'DMIC2'
  ; Item #53 'DMIC3'
  ; Item #54 'DMIC4'
  ; Item #55 'ADX1 TX1'
  ; Item #56 'ADX1 TX2'
  ; Item #57 'ADX1 TX3'
  ; Item #58 'ADX1 TX4'
  ; Item #59 'ADX2 TX1'
  ; Item #60 'ADX2 TX2'
  ; Item #61 'ADX2 TX3'
  ; Item #62 'ADX2 TX4'
  ; Item #63 'ADX3 TX1'
  ; Item #64 'ADX3 TX2'
  ; Item #65 'ADX3 TX3'
  ; Item #66 'ADX3 TX4'
  ; Item #67 'ADX4 TX1'
  ; Item #68 'ADX4 TX2'
  ; Item #69 'ADX4 TX3'
  ; Item #70 'ADX4 TX4'
  ; Item #71 'ADMAIF17'
  ; Item #72 'ADMAIF18'
  ; Item #73 'ADMAIF19'
  ; Item #74 'ADMAIF20'
  ; Item #75 'ASRC1 TX1'
  ; Item #76 'ASRC1 TX2'
  ; Item #77 'ASRC1 TX3'
  ; Item #78 'ASRC1 TX4'
  ; Item #79 'ASRC1 TX5'
  ; Item #80 'ASRC1 TX6'
  : values=2
evk@tegra-ubuntu:~$ amixer -c APE cset name="ADMAIF2 Mux" "I2S2"
numid=1290,iface=MIXER,name='ADMAIF2 Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=81
  ; Item #0 'None'
  ; Item #1 'ADMAIF1'
  ; Item #2 'ADMAIF2'
  ; Item #3 'ADMAIF3'
  ; Item #4 'ADMAIF4'
  ; Item #5 'ADMAIF5'
  ; Item #6 'ADMAIF6'
  ; Item #7 'ADMAIF7'
  ; Item #8 'ADMAIF8'
  ; Item #9 'ADMAIF9'
  ; Item #10 'ADMAIF10'
  ; Item #11 'ADMAIF11'
  ; Item #12 'ADMAIF12'
  ; Item #13 'ADMAIF13'
  ; Item #14 'ADMAIF14'
  ; Item #15 'ADMAIF15'
  ; Item #16 'ADMAIF16'
  ; Item #17 'I2S1'
  ; Item #18 'I2S2'
  ; Item #19 'I2S3'
  ; Item #20 'I2S4'
  ; Item #21 'I2S5'
  ; Item #22 'I2S6'
  ; Item #23 'SFC1'
  ; Item #24 'SFC2'
  ; Item #25 'SFC3'
  ; Item #26 'SFC4'
  ; Item #27 'MIXER1 TX1'
  ; Item #28 'MIXER1 TX2'
  ; Item #29 'MIXER1 TX3'
  ; Item #30 'MIXER1 TX4'
  ; Item #31 'MIXER1 TX5'
  ; Item #32 'AMX1'
  ; Item #33 'AMX2'
  ; Item #34 'AMX3'
  ; Item #35 'AMX4'
  ; Item #36 'ARAD1'
  ; Item #37 'AFC1'
  ; Item #38 'AFC2'
  ; Item #39 'AFC3'
  ; Item #40 'AFC4'
  ; Item #41 'AFC5'
  ; Item #42 'AFC6'
  ; Item #43 'OPE1'
  ; Item #44 'SPKPROT1'
  ; Item #45 'MVC1'
  ; Item #46 'MVC2'
  ; Item #47 'IQC1-1'
  ; Item #48 'IQC1-2'
  ; Item #49 'IQC2-1'
  ; Item #50 'IQC2-2'
  ; Item #51 'DMIC1'
  ; Item #52 'DMIC2'
  ; Item #53 'DMIC3'
  ; Item #54 'DMIC4'
  ; Item #55 'ADX1 TX1'
  ; Item #56 'ADX1 TX2'
  ; Item #57 'ADX1 TX3'
  ; Item #58 'ADX1 TX4'
  ; Item #59 'ADX2 TX1'
  ; Item #60 'ADX2 TX2'
  ; Item #61 'ADX2 TX3'
  ; Item #62 'ADX2 TX4'
  ; Item #63 'ADX3 TX1'
  ; Item #64 'ADX3 TX2'
  ; Item #65 'ADX3 TX3'
  ; Item #66 'ADX3 TX4'
  ; Item #67 'ADX4 TX1'
  ; Item #68 'ADX4 TX2'
  ; Item #69 'ADX4 TX3'
  ; Item #70 'ADX4 TX4'
  ; Item #71 'ADMAIF17'
  ; Item #72 'ADMAIF18'
  ; Item #73 'ADMAIF19'
  ; Item #74 'ADMAIF20'
  ; Item #75 'ASRC1 TX1'
  ; Item #76 'ASRC1 TX2'
  ; Item #77 'ASRC1 TX3'
  ; Item #78 'ASRC1 TX4'
  ; Item #79 'ASRC1 TX5'
  ; Item #80 'ASRC1 TX6'
  : values=18
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv Auto-mute Switch' 0
numid=450,iface=MIXER,name='tlv Auto-mute Switch'
  ; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
  : values=0
evk@tegra-ubuntu:~$ 
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv HP DAC Playback Switch' 1
numid=442,iface=MIXER,name='tlv HP DAC Playback Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=on,on
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv HP Driver Gain Volume' 0
numid=440,iface=MIXER,name='tlv HP Driver Gain Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=35,step=0
  : values=0,0
  | dBscale-min=-6.00dB,step=1.00dB,mute=0
evk@tegra-ubuntu:~$ 
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv HPL Output Mixer IN1_L Switch' 1
numid=1500,iface=MIXER,name='tlv HPL Output Mixer IN1_L Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv HPR Output Mixer IN1_R Switch' 1
numid=1503,iface=MIXER,name='tlv HPR Output Mixer IN1_R Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ 
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv HPL Output Mixer L_DAC Switch' 1
numid=1499,iface=MIXER,name='tlv HPL Output Mixer L_DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv HPR Output Mixer R_DAC Switch' 1
numid=1502,iface=MIXER,name='tlv HPR Output Mixer R_DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ 
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv LO DAC Playback Switch' 1
numid=443,iface=MIXER,name='tlv LO DAC Playback Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=on,on
evk@tegra-ubuntu:~$ 
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv LO Driver Gain Volume' 0
numid=441,iface=MIXER,name='tlv LO Driver Gain Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=35,step=0
  : values=0,0
  | dBscale-min=-6.00dB,step=1.00dB,mute=0
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv LOL Output Mixer L_DAC Switch' 1
numid=1501,iface=MIXER,name='tlv LOL Output Mixer L_DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv LOR Output Mixer R_DAC Switch' 1
numid=1504,iface=MIXER,name='tlv LOR Output Mixer R_DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ 
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv PCM Playback Volume' 130
numid=437,iface=MIXER,name='tlv PCM Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=175,step=0
  : values=130,130
  | dBscale-min=-63.50dB,step=0.50dB,mute=0
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv PGA Level Volume' 95
numid=449,iface=MIXER,name='tlv PGA Level Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=95,step=0
  : values=95,95
  | dBscale-min=0.00dB,step=0.50dB,mute=0
evk@tegra-ubuntu:~$ 
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv Microphone PGA Switch' 0
amixer: Cannot find the given element from control hw:1

evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv Right Input Mixer IN1_R P Switch' 1
numid=1508,iface=MIXER,name='tlv Right Input Mixer IN1_R P Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv Right Input Mixer IN2_R P Switch' 0
numid=1509,iface=MIXER,name='tlv Right Input Mixer IN2_R P Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv Right Input Mixer IN3_R P Switch' 1
numid=1510,iface=MIXER,name='tlv Right Input Mixer IN3_R P Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv Left Input Mixer IN1_L P Switch' 1
numid=1505,iface=MIXER,name='tlv Left Input Mixer IN1_L P Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv Left Input Mixer IN2_L P Switch' 0
numid=1506,iface=MIXER,name='tlv Left Input Mixer IN2_L P Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv Left Input Mixer IN3_L P Switch' 1
numid=1507,iface=MIXER,name='tlv Left Input Mixer IN3_L P Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
evk@tegra-ubuntu:~$ 
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv ADCFGA Left Mute Switch' 0
numid=446,iface=MIXER,name='tlv ADCFGA Left Mute Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
evk@tegra-ubuntu:~$ amixer -c APE cset name='tlv ADCFGA Right Mute Switch' 0
numid=447,iface=MIXER,name='tlv ADCFGA Right Mute Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
evk@tegra-ubuntu:~$ aplay -D hw:APE,1 ~/Downloads/file_example_WAV_10MG.wav
Playing WAVE '/home/evk/Downloads/file_example_WAV_10MG.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
^CAborted by signal Interrupt...

Hi Parashuram,
Can you help providing the clk_summary from the target during the usecase active.

sudo cat /sys/kernel/debug/clk/clk_summary

Do you have oscilloscope to measure signals. if so can you measure I2S2 pins without connecting codec to it

Hi,

Please find the below clik_summary where .wav while playing
clk_summary.log (80.1 KB)
The I2S2 lanes were disconnected from the Codec and connected to the oscilloscope. here is the output

Hi Parashuram,
The clock summary values looks fine for I2S2 as per log. But the oscilloscope data seems not proper for some reason. Not aligning with the rate shown in the log file values.

Also, am curious to know how you connected MCLK to codec as on Orin AGX Aud_MCLK goes only to the internal RT5640 codec. Can you provide the pin details you connected to codec

Hello
This is how i connected From AUDIO Codec to AGX ORIN EVKIT through 40 PIN Header
Connections:

I2S (Audio Data)

MCLK → Jetson AGX Orin AUD_MCLK PIN 7
BCLK → Jetson AGX Orin I2S2_CLK PIN 12
WCLK/LRCLK → Jetson AGX Orin I2S2_FS PIN 35
DOUT → Jetson AGX Orin I2S2_DIN PIN 38
DIN → Jetson AGX Orin I2S2_DOUT PIN40

SCL → Jetson AGX Orin I2C_SCL PIN 5
SDA → Jetson AGX Orin I2C_SDA PIN 3
GND → Jetson AGX Orin GND PIN 6

MCLK → Jetson AGX Orin AUD_MCLK PIN 7
This can’t be used for codec as MCLK. This is not the Aud_MCLK. Can you check if Codec can operate without MCLK if it has internal PLL?

Hello,

I disconnected MCLK and kept the remaining I2S2 lanes connected to the audio codec. After playing a .wav file, I didn’t hear any sound not even noise.

I also noticed that there is no pulse on DOUT from the AGX Orin. It seems that without MCLK, no data is being transmitted.

Regards,
Parashuram

Hi Parashuram,
As a first step, We need to make sure without codec, the Tegra I2S2 signals are measured properly.

Just for validating DOUT and DIN you can do below steps too as am not able to see your scope measurement inline with the clk summary values log.

  1. connect I2S DOUT → I2S DIN with wire at 40 pin header.
  2. amixer -c APE cset name=“I2S2 Mux” “ADMAIF2”
  3. amixer -c APE cset name=“ADMAIF2 Mux” “I2S2”
  4. aplay -D hw:APE,1 ~/Downloads/file_example_WAV_10MG.wav &
  5. arecord -D hw:APE,1 -r 44100 -c 2 -f S16_LE -d 20 ~/Downloads/capture.wav &

pull out capture.wav and check if it aligns with input file with aplay.

Also attach the kernel uart log if issue exists.

Hello,

As you suggested, I tried and checked the capture.wav file, but it contains no data, meaning nothing was recorded. I also probed the signals, and the results are as follows:

Please find the details below. L



dmesg.log (105.2 KB)

The kernel log shows below error

[ 125.631299] tegra210-adsp tegra210-adsp: Broken Path1 - FE not linked to BE
[ 125.638497] tegra210-adsp tegra210-adsp: ASoC: error at snd_soc_component_open on tegra210-adsp: -32
[ 125.683992] tegra210-adsp tegra210-adsp: Broken Path1 - FE not linked to BE
[ 125.691212] tegra210-adsp tegra210-adsp: ASoC: error at snd_soc_component_open on tegra210-adsp: -32
[ 125.733712] tegra210-adsp tegra210-adsp: Broken Path2 - FE not linked to BE
[ 125.740904] tegra210-adsp tegra210-adsp: ASoC: error at snd_soc_component_open on tegra210-adsp: -32
[ 125.783371] tegra210-adsp tegra210-adsp: Broken Path2 - FE not linked to BE
[ 125.790564] tegra210-adsp tegra210-adsp: ASoC: error at snd_soc_component_open on tegra210-adsp: -32
[ 125.842574] Kenel info print in hw params

Can you cross check your mixer control configs. Also hw_params prints are seen continuously.

Can you provide the list of mixer controls you configured after rebooting the target for the usecase.

Hello,

please find below mixer controls

amixer -c APE cset name="I2S2 Mux" "ADMAIF2"
amixer -c APE cset name="ADMAIF2 Mux" "I2S2"
amixer -c APE cset name='tlv Auto-mute Switch' 0

amixer -c APE cset name='tlv HP DAC Playback Switch' 1
amixer -c APE cset name='tlv HP Driver Gain Volume' 0

amixer -c APE cset name='tlv HPL Output Mixer IN1_L Switch' 1
amixer -c APE cset name='tlv HPR Output Mixer IN1_R Switch' 1

amixer -c APE cset name='tlv HPL Output Mixer L_DAC Switch' 1
amixer -c APE cset name='tlv HPR Output Mixer R_DAC Switch' 1

amixer -c APE cset name='tlv LO DAC Playback Switch' 1

amixer -c APE cset name='tlv LO Driver Gain Volume' 0
amixer -c APE cset name='tlv LOL Output Mixer L_DAC Switch' 1
amixer -c APE cset name='tlv LOR Output Mixer R_DAC Switch' 1

amixer -c APE cset name='tlv PCM Playback Volume' 130
amixer -c APE cset name='tlv PGA Level Volume' 95

amixer -c APE cset name='tlv Microphone PGA Switch' 0
amixer -c APE cset name='tlv Right Input Mixer IN1_R P Switch' 1
amixer -c APE cset name='tlv Right Input Mixer IN2_R P Switch' 0
amixer -c APE cset name='tlv Right Input Mixer IN3_R P Switch' 1
amixer -c APE cset name='tlv Left Input Mixer IN1_L P Switch' 1
amixer -c APE cset name='tlv Left Input Mixer IN2_L P Switch' 0
amixer -c APE cset name='tlv Left Input Mixer IN3_L P Switch' 1

amixer -c APE cset name='tlv ADCFGA Left Mute Switch' 0
amixer -c APE cset name='tlv ADCFGA Right Mute Switch' 0 

Regards,
Parashuram

Try changing this to “1” and see

Hi Parashuram,
As I2S FS and SCLK is seen on scope, it is strange DOUT is not coming out for probe. I want to ignore the codec factor here.

Can you revert the TLV Codec related DT changes(roll back to original DT) and check the I2S2 DOUT signal with below command after I2S2 pinmux config with jetson IO.

Hello,

I have reverted to the original DT, and there is no TLV320AIC3204 codec DT present.

The probed signals are shown (details below). I observed some transactions on the DOut pin.

Regards,
Parashuram

Hi Parashuram,
Good to know the DOUT is having signal out. This confirms the I2S2 Pinmux and clocks are coming out of Tegra properly. We need to keep this as reference for the codec integration.

Can you try now codec DT changes and check signal after connecting to codec. Please attach the DT changes if you face the issue

Hello,

I have added the TLV320AIC3204 device tree (DT) changes, but I do not see any transitions on the Dout pin or clocks.

Below are my DT changes for reference.
diff.txt (3.8 KB)

  ; Item #80 'ASRC1 TX6'
  : values=18
evk@tegra-ubuntu:~$ sudo i2cdetect -y -r 7 
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: 50 -- 52 -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
evk@tegra-ubuntu:~$ aplay -D hw:APE,1 ~/Downloads/file_example_WAV_10MG.wav & arecord -D hw:APE,1 -f S16_LE -c 2 -r 44100 my.wav -v
[1] 4527
Playing WAVE '/home/evk/Downloads/file_example_WAV_10MG.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Recording WAVE 'my.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Hardware PCM card 1 'NVIDIA Jetson AGX Orin APE' device 1 subdevice 0
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 2
  rate         : 44100
  exact rate   : 44100 (44100/1)
  msbits       : 16
  buffer_size  : 8192
  period_size  : 2048
  period_time  : 46439
  tstamp_mode  : NONE
  tstamp_type  : MONOTONIC
  period_step  : 1
  avail_min    : 2048
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 8192
  silence_threshold: 0
  silence_size : 0
  boundary     : 4611686018427387904
  appl_ptr     : 0
  hw_ptr       : 0
arecord: pcm_read:2178: read error: Input/output error
[1]+  Done                    aplay -D hw:APE,1 ~/Downloads/file_example_WAV_10MG.wav
evk@tegra-ubuntu:~$ 

dmesg_custom.log (79.7 KB)

After reviewing your DT changes, here are some suggestions

  1. Don’t need the below change
  	/* for I2S2 */
  	i2s@2901100 {
  		bclk-ratio = <4>;
  	};
  1. Can you remove below entry from &i2s2_to_codec { } and use format = “i2s”;
  •    format = "dsp_a"
    

Also, as you mentioned signals are not seen after connection Codec. It is advisable to check the codec connections to the Tegra as per the codec vendor recommendations.

When you tried playback, does the aplay or speaker-test runs for the whole duration of the file for e.g if you play a wave file of 10 seconds, it should exit after 10 seconds to validate the proper functionality.

Hello,

I have not yet connected the I2S lanes to the audio codec. Instead, I connected Dout to Din and probed the remaining signals per your suggestion.

Here is the modified DT after your review.
diff2.txt (3.7 KB)

evk@tegra-ubuntu:~$ timeout 59 aplay -D hw:APE,1 ~/Downloads/file_example_WAV_10MG.wav & timeout 60 arecord -D hw:APE,1 -f S16_LE -c 2 -r 44100 my.wav -v
[1] 5219
Recording WAVE 'my.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Playing WAVE '/home/evk/Downloads/file_example_WAV_10MG.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Hardware PCM card 1 'NVIDIA Jetson AGX Orin APE' device 1 subdevice 0
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 2
  rate         : 44100
  exact rate   : 44100 (44100/1)
  msbits       : 16
  buffer_size  : 8192
  period_size  : 2048
  period_time  : 46439
  tstamp_mode  : NONE
  tstamp_type  : MONOTONIC
  period_step  : 1
  avail_min    : 2048
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 8192
  silence_threshold: 0
  silence_size : 0
  boundary     : 4611686018427387904
  appl_ptr     : 0
  hw_ptr       : 0
Aborted by signal Terminated...
Aborted by signal Terminated...
[1]+  Exit 124                timeout 59 aplay -D hw:APE,1 ~/Downloads/file_example_WAV_10MG.wav
evk@tegra-ubuntu:~$ soxi -d ~/Downloads/file_example_WAV_10MG.wav
00:00:59.77
evk@tegra-ubuntu:~$ 



dmesg2_custom.log (100.8 KB)

Regards,
Parashuram