TLV320aic32x4 audio codec is not detecting for tx2i

Hello Jonathanh,

Thanks for your reply,
I have made DT changes according to your reference.

+                "z Headphone", "z LOL",
+               "z Headphone", "z LOR",
+                "z Left DAC", "z Playback",
+                "z Right DAC", "z Playback",
+               "z IN1_L", "z Mic",
+               "z IN1_R", "z Mic",
+                "z Capture", "z Left ADC",
+                "z Capture", "z Right ADC";

Please find the attached output tegra-audio-debug.txt (556.5 KB)

Regards,
Parashuram

Hello!

Thanks. Can you try running the following …

amixer -c tegrasndt186ref cset name='z LO DAC Playback Switch' 1
amixer -c tegrasndt186ref cset name='z LOL Output Mixer L_DAC Switch' 1
amixer -c tegrasndt186ref cset name='z LOR Output Mixer R_DAC Switch' 1
echo 0 | sudo tee /sys/kernel/debug/tracing/trace
echo 0 | sudo tee /sys/kernel/debug/tracing/events/enable
echo 1 | sudo tee /sys/kernel/debug/tracing/tracing_on
echo 1 | sudo tee /sys/kernel/debug/tracing/events/asoc/snd_soc_dapm_widget_power/enable
speaker-test -D hw:tegrasndt186ref,0 -c 2 -r 48000 -F S16_LE -t sine -f 500 -l 2
sudo cat /sys/kernel/debug/tracing/trace

Thanks
Jon

Hello Jonathanh,

Please find the attached output results.output.txt (6.4 KB)

nfs@nfs-desktop:~$ amixer -c tegrasndt186ref cset name='z LO DAC Playback Switch' 1
numid=879,iface=MIXER,name='z LO DAC Playback Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=on,on
nfs@nfs-desktop:~$ amixer -c tegrasndt186ref cset name='z LOL Output Mixer L_DAC Switch' 1
numid=1118,iface=MIXER,name='z LOL Output Mixer L_DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
nfs@nfs-desktop:~$ amixer -c tegrasndt186ref cset name='z LOR Output Mixer R_DAC Switch' 1
numid=1121,iface=MIXER,name='z LOR Output Mixer R_DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
nfs@nfs-desktop:~$ echo 0 | sudo tee /sys/kernel/debug/tracing/trace
[sudo] password for nfs: 
0
nfs@nfs-desktop:~$ echo 0 | sudo tee /sys/kernel/debug/tracing/events/enable
0
nfs@nfs-desktop:~$ echo 1 | sudo tee /sys/kernel/debug/tracing/tracing_on
1
nfs@nfs-desktop:~$ echo 1 | sudo tee /sys/kernel/debug/tracing/events/asoc/snd_soc_dapm_widget_power/enable
1
nfs@nfs-desktop:~$ speaker-test -D hw:tegrasndt186ref,0 -c 2 -r 48000 -F S16_LE -t sine -f 500 -l 2

speaker-test 1.1.3

Playback device is hw:tegrasndt186ref,0
Stream parameters are 48000Hz, S16_LE, 2 channels
Sine wave rate is 500.0000Hz
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 32 to 8192
Period size range from 32 to 4096
Using max buffer size 8192
Periods = 4
was set period_size = 2048
was set buffer_size = 8192
 0 - Front Left
 1 - Front Right
Time per period = 0.198871
 0 - Front Left
 1 - Front Right
Time per period = 0.202331
nfs@nfs-desktop:~$ sudo cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 44/44   #P:4
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
    speaker-test-9563  [000] ....   294.230940: snd_soc_dapm_widget_power: widget=Playback 1 val=1
    speaker-test-9563  [000] ....   294.230945: snd_soc_dapm_widget_power: widget=ADMAIF1 Receive val=1
    speaker-test-9563  [000] ....   294.230947: snd_soc_dapm_widget_power: widget=ADMAIF1 RX val=1
    speaker-test-9563  [000] ....   294.230952: snd_soc_dapm_widget_power: widget=I2S1 Mux val=1
    speaker-test-9563  [000] ....   294.230954: snd_soc_dapm_widget_power: widget=I2S1 TX val=1
    speaker-test-9563  [000] ....   294.230955: snd_soc_dapm_widget_power: widget=I2S1 Transmit val=1
    speaker-test-9563  [000] ....   294.230956: snd_soc_dapm_widget_power: widget=I2S1 Transmit-I2S1 CIF Receive val=1
    speaker-test-9563  [000] ....   294.230957: snd_soc_dapm_widget_power: widget=I2S1 CIF Receive val=1
    speaker-test-9563  [000] ....   294.230957: snd_soc_dapm_widget_power: widget=I2S1 CIF RX val=1
    speaker-test-9563  [000] ....   294.230958: snd_soc_dapm_widget_power: widget=I2S1 DAP TX val=1
    speaker-test-9563  [000] ....   294.230959: snd_soc_dapm_widget_power: widget=I2S1 DAP Transmit val=1
    speaker-test-9563  [000] ....   294.230960: snd_soc_dapm_widget_power: widget=I2S1 DAP Transmit-z Playback val=1
    speaker-test-9563  [000] ....   294.230961: snd_soc_dapm_widget_power: widget=z Playback val=1
    speaker-test-9563  [000] ....   294.230962: snd_soc_dapm_widget_power: widget=z Right DAC val=1
    speaker-test-9563  [000] ....   294.230964: snd_soc_dapm_widget_power: widget=z Left DAC val=1
    speaker-test-9563  [000] ....   294.230965: snd_soc_dapm_widget_power: widget=z LOR Output Mixer val=1
    speaker-test-9563  [000] ....   294.230966: snd_soc_dapm_widget_power: widget=z LOL Output Mixer val=1
    speaker-test-9563  [000] ....   294.230966: snd_soc_dapm_widget_power: widget=z LOR Power val=1
    speaker-test-9563  [000] ....   294.230967: snd_soc_dapm_widget_power: widget=z LOL Power val=1
    speaker-test-9563  [000] ....   294.230968: snd_soc_dapm_widget_power: widget=z LOR val=1
    speaker-test-9563  [000] ....   294.230969: snd_soc_dapm_widget_power: widget=z LOL val=1
    speaker-test-9563  [000] ....   294.230970: snd_soc_dapm_widget_power: widget=z Headphone val=1
    speaker-test-9563  [000] ....   294.745285: snd_soc_dapm_widget_power: widget=Playback 1 val=0
    speaker-test-9563  [000] ....   294.745293: snd_soc_dapm_widget_power: widget=ADMAIF1 Receive val=0
    speaker-test-9563  [000] ....   294.745297: snd_soc_dapm_widget_power: widget=ADMAIF1 RX val=0
    speaker-test-9563  [000] ....   294.745306: snd_soc_dapm_widget_power: widget=I2S1 Mux val=0
    speaker-test-9563  [000] ....   294.745310: snd_soc_dapm_widget_power: widget=I2S1 TX val=0
    speaker-test-9563  [000] ....   294.745312: snd_soc_dapm_widget_power: widget=I2S1 Transmit val=0
    speaker-test-9563  [000] ....   294.745315: snd_soc_dapm_widget_power: widget=I2S1 Transmit-I2S1 CIF Receive val=0
    speaker-test-9563  [000] ....   294.745318: snd_soc_dapm_widget_power: widget=I2S1 CIF Receive val=0
    speaker-test-9563  [000] ....   294.745320: snd_soc_dapm_widget_power: widget=I2S1 CIF RX val=0
    speaker-test-9563  [000] ....   294.745322: snd_soc_dapm_widget_power: widget=I2S1 DAP TX val=0
    speaker-test-9563  [000] ....   294.745325: snd_soc_dapm_widget_power: widget=I2S1 DAP Transmit val=0
    speaker-test-9563  [000] ....   294.745327: snd_soc_dapm_widget_power: widget=I2S1 DAP Transmit-z Playback val=0
    speaker-test-9563  [000] ....   294.745330: snd_soc_dapm_widget_power: widget=z Playback val=0
    speaker-test-9563  [000] ....   294.745333: snd_soc_dapm_widget_power: widget=z Right DAC val=0
    speaker-test-9563  [000] ....   294.745336: snd_soc_dapm_widget_power: widget=z Left DAC val=0
    speaker-test-9563  [000] ....   294.745338: snd_soc_dapm_widget_power: widget=z LOR Output Mixer val=0
    speaker-test-9563  [000] ....   294.745340: snd_soc_dapm_widget_power: widget=z LOL Output Mixer val=0
    speaker-test-9563  [000] ....   294.745343: snd_soc_dapm_widget_power: widget=z LOR Power val=0
    speaker-test-9563  [000] ....   294.745345: snd_soc_dapm_widget_power: widget=z LOL Power val=0
    speaker-test-9563  [000] ....   294.745347: snd_soc_dapm_widget_power: widget=z LOR val=0
    speaker-test-9563  [000] ....   294.745348: snd_soc_dapm_widget_power: widget=z LOL val=0
    speaker-test-9563  [000] ....   294.745351: snd_soc_dapm_widget_power: widget=z Headphone val=0
nfs@nfs-desktop:~$ 

Regards,
Parashuram

Hello!

Do you hear anything on the line outputs? If not are you able to probe the I2S pins and see if there is any activity on the I2S signals?

Regards,
Jon

Hi,
We are trying to run the plaback script and probe the I2S lines. We are getting following error s while running playback.sh.

aplay: main:788: audio open error: Device or resource busy

Please find attached the log file. play.txt (3.9 KB)

Regards,
Parashuram

Hello!

Yes that can be normal is something else like pulseaudio is using the device. Can you try using the plughw as follows …

amixer -c tegrasndt186ref cset name='z LO DAC Playback Switch' 1
amixer -c tegrasndt186ref cset name='z LOL Output Mixer L_DAC Switch' 1
amixer -c tegrasndt186ref cset name='z LOR Output Mixer R_DAC Switch' 1
speaker-test -D plughw:tegrasndt186ref,0 -c 2 -r 48000 -F S16_LE -t sine -f 500

Jon

Hi,

Please find the attached output results.

ubuntu@ubuntu-desktop:~$ amixer -c tegrasndt186ref cset name='z LO DAC Playback Switch' 1
numid=879,iface=MIXER,name='z LO DAC Playback Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=on,on
ubuntu@ubuntu-desktop:~$ amixer -c tegrasndt186ref cset name='z LOL Output Mixer L_DAC Switch' 1
numid=1118,iface=MIXER,name='z LOL Output Mixer L_DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
ubuntu@ubuntu-desktop:~$ amixer -c tegrasndt186ref cset name='z LOR Output Mixer R_DAC Switch' 1
numid=1121,iface=MIXER,name='z LOR Output Mixer R_DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on

Speakar log speakar_test.txt (100.6 KB)

Regards,
Parashuram

Hello!

Do you hear anything? If not do you see any activity of the I2S signals? Do you have an oscilloscope to probe the I2S signals?

Regards,
Jon

Hi,

we are able to see a transaction in the pin of aud_mclk, lrck and sclk data transaction is happening but there is no data transaction for SDATA_IN and SDATA_OUT pins.

These are my Pinmux configuration changes could you please let me know the Pinmux changes are proper.

pinmux.0x02431040 = 0x00000400; # dap1_sclk_pj0: i2s1, tristate-disable, input-disable, lpdr-disable
pinmux.0x02431038 = 0x00000400; # dap1_dout_pj1: i2s1, tristate-disable, input-disable, lpdr-disable
pinmux.0x02431030 = 0x00000458; # dap1_din_pj2: i2s1, pull-up, tristate-enable, input-enable, lpdr-disable
pinmux.0x02431028 = 0x00000400; # dap1_fs_pj3: i2s1, tristate-disable, input-disable, lpdr-disable
pinmux.0x02431020 = 0x00000400; # aud_mclk_pj4: aud, tristate-disable, input-disable, lpdr-disable

Regards,
Parashuram

Hello!

The pin settings look fine. What are the frequencies of the MCLK, SCLK and LRCK? The MCLK should be 12MHz, the LRCK should be the sample rate (eg. 44.1KHz, 48KHz, etc depending on the PCM sample rate) and the SCLK should be fsnum-channelsbits-per-channel.

Regards,
Jon

Hi Jon,
Below is the status of each pin :
MCLK : 12MHz
SCLK: 12MHz
LRCK: 93.7kHz
SDIN: No transaction.
SDOUT: No transaction.
Do we need to change anything tlvai320aicc32x4.c file so that transaction on SDIN and SDOUT gets enabled.

Regards
Parshuram

Hello!

What sample-rate are you using? If you are running the following command then the sample-rate should be 48kHz …

speaker-test -D plughw:tegrasndt186ref,0 -c 2 -r 48000 -F S16_LE -t sine -f 500

In this case I would expect the LRCK to be 48kHz and not ~94kHz. Furthermore, I would expect the SCLK to be 2 * 16 * 48000 = 1.536MHz and not 12MHz. So the clock frequencies here do not look correct. When you run the above command can you …

speaker-test -D plughw:tegrasndt186ref,0 -c 2 -r 48000 -F S16_LE -t sine -f 500 &
sudo grep "aud_mclk\|i2s1" /sys/kernel/debug/clk/clk_summary
sudo cat /sys/kernel/debug/regmap/tegra210-i2s.0/registers

There is nothing that needs to be changed in the codec driver as far as I know. At least the DOUT from Tegra should be just driven by Tegra for playback.

Are you probing the I2S pins on the 40-pin of the TX2i board? If so what pins are you probing?

Regards,
Jon

Hello,

Please find the attached sample rate output result speakar-TEST_11_01.txt (34.6 KB) .
speakar-TEST_500.txt (5.3 KB) aud_mclk.txt (572 Bytes) regmap.txt (670 Bytes)

We have a custom TX2i carrier board we are probing SDIN, SDOUT, LRCK,SCLK and MCLK on the PCB pads.

Regards,
Parashuram

Hello!

OK I can see a problem …

In the above I see the the codec is the bit clock and frame master. I believe originally, you had this configured as slave. Looking at Igal’s configuration he used slave and not master. If you want the codec to be the bit clock and frame master, then you need to enable the ‘input-enable’ for the dap1_fs_pj3 pin. Right now you have this disabled and so Tegra will not see the frame clock …

pinmux.0x02431028 = 0x00000400; # dap1_fs_pj3: i2s1, tristate-disable, input-disable, lpdr-disable

I am a bit concerned why the codec is generating the wrong frequencies for the SCLK and LRCK and so maybe there is something else you need to configure on the codec side. You would need to review the codec documentation to figure this out. Otherwise, you could make Tegra the bit clock and frame master instead because we know that Igal had this working.

Jon

Hi Jon,
I can hear the Line out audio after making bit-clock and frame in “slave” mode. Thanks a lot for your support !! I greatly appreciate it.

I am not able to see any output on the Headphone lines? Do i need to enable it in tegra186-quill-common.dtsi file?if yes, how do i enable it?
I could see transaction on DOUT and DIN pins only after playing the play.sh script. Without running this script, i couldn’t see any transaction even if i was playing some audio file. Any idea, why is that so?

Regards
Parshuram

Hello!

That is great to hear!

The reason you need to run the play.sh to hear the audio, is because this script is configuring the codec. I am also wondering if running just the following commands also work …

amixer -c tegrasndt186ref cset name='z LO DAC Playback Switch' 1
amixer -c tegrasndt186ref cset name='z LOL Output Mixer L_DAC Switch' 1
amixer -c tegrasndt186ref cset name='z LOR Output Mixer R_DAC Switch' 1
speaker-test -D plughw:tegrasndt186ref,0 -c 2 -r 48000 -F S16_LE -t sine -f 500

This is a common problem I see people struggle when integrating a new codec, is that by default the audio paths in the codec are not configured and so you need to figure out the mixer controls you need to set for the codec. Every codec is a bit different and so every codec has different mixer controls that need to be set. Hence, it is not easy for us to tell you how to configure the codec, especially when it is not a codec we test.

For the headphone you also need to add these to the route …

nvidia,audio-routing =
                "z Headphone", "z LOL",
            	"z Headphone", "z LOR",
                "z Headphone", "z HPL",
            	"z Headphone", "z HPR",
                "z Left DAC", "z Playback",
                "z Right DAC", "z Playback",
            	"z IN1_L", "z Mic",
            	"z IN1_R", "z Mic",
                "z Capture", "z Left ADC",
                "z Capture", "z Right ADC";

And you will need to enable the headphone output in the codec …

amixer -c tegrasndt186ref cset name='z HPL Output Mixer L_DAC Switch' 1
amixer -c tegrasndt186ref cset name='z HPR Output Mixer R_DAC Switch' 1

Regards,
Jon

Hello Jon,
Thanks for your reply. I tried above for enabling Headphone output. I can see the transaction on DOUT, MCLK,LRCK and SRCLK but there is no signal on HPL and HPR pins. When we enable Line out as suggested, we can see analog signals on LOL & LOR pins and we can hear the sound as well.
Are we missing something to enable Headphone out?
We also need to enable 1-Line IN and one MICIN. I added following but it is not working too.
nvidia,audio-routing =

            "z Headphone", "z LOL",
            "z Headphone", "z LOR",
            "z Headphone", "z HPL",
            "z Headphone", "z HPR",
            "z Left DAC", "z Playback",
            "z Right DAC", "z Playback",
            "z IN1_L", "z Mic",
            "z IN1_R", "z Mic",
            "z IN2_L", "z Mic",
            "z IN2_R", "z Mic",
            "z IN3_L", "z Mic",
            "z IN3_R", "z Mic",
            "z Capture", "z Left ADC",
            "z Capture", "z Right ADC";

Do we need to set the mixer controls for LINEIN and MICIN as well?
Regards
Parshuram

Hello Jon,

could you please update, I’m waiting for your reply. Any help will be greatly appreciated.

Regards,
Parashuram

Hello,

For assistance with configuring the codec itself, I recommend that you ask the codec vendor and/or review the codec documentation to understand if the codec is configured correctly. Please let us know if you are able to get this working.

Regards
Jon

Hello Jon,

Thanks for your support. codec is up and working fine.
Is there any way to convert mono input recorded from Mic IN to Stereo output for Playback?

Regards,
Parashuram