ACL5640 doesn't work

Hi NVIDIA,

我们的AGX ORIN载板使用了ACL5640,I2C已经能够检测到,I2S pinmux也检查过了,测量MCLK和I2S有信号变化。
不确定下一步该如何调试,请帮忙看下,非常感谢。

音频接线跟官方设计应该是一样的。


部分log:

root@tegra-ubuntu:/home/nv# amixer 
ALSA lib confmisc.c:165:(snd_config_get_card) Cannot get card index for APE
amixer: Mixer attach default error: No such device
root@tegra-ubuntu:/home/nv# cat /proc/asound/cards
 0 [HDA            ]: tegra-hda - NVIDIA Jetson AGX Orin HDA
                      NVIDIA Jetson AGX Orin HDA at 0x3518000 irq 126
root@tegra-ubuntu:/home/nv# cat /proc/asound/cards
 0 [HDA            ]: tegra-hda - NVIDIA Jetson AGX Orin HDA
                      NVIDIA Jetson AGX Orin HDA at 0x3518000 irq 126
root@tegra-ubuntu:/home/nv# 
root@tegra-ubuntu:/home/nv# 
root@tegra-ubuntu:/home/nv# cat /proc/asound/
card0/   cards    devices  HDA/     hwdep    pcm      timers   version  
root@tegra-ubuntu:/home/nv# cat /proc/asound/devices 
  2: [ 0- 3]: digital audio playback
  3: [ 0- 7]: digital audio playback
  4: [ 0- 8]: digital audio playback
  5: [ 0- 9]: digital audio playback
  6: [ 0]   : control
 33:        : timer
root@tegra-ubuntu:/home/nv# cat /proc/asound/
card0/   cards    devices  HDA/     hwdep    pcm      timers   version  
root@tegra-ubuntu:/home/nv# cat /proc/asound/pcm 
00-03: HDMI 0 : HDMI 0 : playback 1
00-07: HDMI 1 : HDMI 1 : playback 1
00-08: HDMI 2 : HDMI 2 : playback 1
00-09: HDMI 3 : HDMI 3 : playback 1
root@tegra-ubuntu:/home/nv# cat /proc/asound/version 
Advanced Linux Sound Architecture Driver Version k5.15.148-tegra.
root@tegra-ubuntu:/home/nv# 
root@tegra-ubuntu:/home/nv# lsmod |grep soc
snd_soc_tegra210_ope    32768  0
snd_soc_tegra210_mixer    45056  0
snd_soc_tegra210_admaif   118784  0
snd_soc_tegra186_asrc    36864  0
snd_soc_tegra_pcm      16384  1 snd_soc_tegra210_admaif
snd_soc_tegra210_afc    20480  0
snd_soc_tegra186_arad    24576  1 snd_soc_tegra186_asrc
snd_soc_tegra210_mvc    20480  0
snd_soc_tegra210_dmic    20480  0
snd_soc_tegra186_dspk    20480  0
snd_soc_tegra210_amx    32768  0
snd_soc_tegra210_adx    28672  0
snd_soc_tegra210_sfc    57344  0
snd_soc_tegra210_i2s    24576  0
snd_soc_tegra210_ahub  1257472  2 snd_soc_tegra210_ope,snd_soc_tegra210_sfc
snd_soc_tegra_machine_driver    16384  0
snd_soc_tegra_utils    28672  2 snd_soc_tegra210_admaif,snd_soc_tegra_machine_driver
snd_soc_simple_card_utils    28672  1 snd_soc_tegra_utils
snd_soc_rt5640        114688  0
snd_soc_rl6231         16384  1 snd_soc_rt5640
root@tegra-ubuntu:/home/nv# 

以下是修改的设备树和kernel log

	sound {
		compatible = "nvidia,tegra186-audio-graph-card";
		status = "okay";

		dais = /* ADMAIF (FE) Ports */
		       <&admaif0_port>, <&admaif1_port>, <&admaif2_port>, <&admaif3_port>,
		       <&admaif4_port>, <&admaif5_port>, <&admaif6_port>, <&admaif7_port>,
		       <&admaif8_port>, <&admaif9_port>, <&admaif10_port>, <&admaif11_port>,
		       <&admaif12_port>, <&admaif13_port>, <&admaif14_port>, <&admaif15_port>,
		       <&admaif16_port>, <&admaif17_port>, <&admaif18_port>, <&admaif19_port>,
		       /* XBAR Ports */
		       <&xbar_i2s1_port>, <&xbar_i2s2_port>, <&xbar_i2s4_port>,
		       <&xbar_i2s6_port>, <&xbar_dmic3_port>,
		       <&xbar_sfc1_in_port>, <&xbar_sfc2_in_port>,
		       <&xbar_sfc3_in_port>, <&xbar_sfc4_in_port>,
		       <&xbar_mvc1_in_port>, <&xbar_mvc2_in_port>,
		       <&xbar_amx1_in1_port>, <&xbar_amx1_in2_port>,
		       <&xbar_amx1_in3_port>, <&xbar_amx1_in4_port>,
		       <&xbar_amx2_in1_port>, <&xbar_amx2_in2_port>,
		       <&xbar_amx2_in3_port>, <&xbar_amx2_in4_port>,
		       <&xbar_amx3_in1_port>, <&xbar_amx3_in2_port>,
		       <&xbar_amx3_in3_port>, <&xbar_amx3_in4_port>,
		       <&xbar_amx4_in1_port>, <&xbar_amx4_in2_port>,
		       <&xbar_amx4_in3_port>, <&xbar_amx4_in4_port>,
		       <&xbar_adx1_in_port>, <&xbar_adx2_in_port>,
		       <&xbar_adx3_in_port>, <&xbar_adx4_in_port>,
		       <&xbar_mix_in1_port>, <&xbar_mix_in2_port>,
		       <&xbar_mix_in3_port>, <&xbar_mix_in4_port>,
		       <&xbar_mix_in5_port>, <&xbar_mix_in6_port>,
		       <&xbar_mix_in7_port>, <&xbar_mix_in8_port>,
		       <&xbar_mix_in9_port>, <&xbar_mix_in10_port>,
		       <&xbar_asrc_in1_port>, <&xbar_asrc_in2_port>,
		       <&xbar_asrc_in3_port>, <&xbar_asrc_in4_port>,
		       <&xbar_asrc_in5_port>, <&xbar_asrc_in6_port>,
		       <&xbar_asrc_in7_port>,
		       <&xbar_ope1_in_port>,
		       /* HW accelerators */
		       <&sfc1_out_port>, <&sfc2_out_port>,
		       <&sfc3_out_port>, <&sfc4_out_port>,
		       <&mvc1_out_port>, <&mvc2_out_port>,
		       <&amx1_out_port>, <&amx2_out_port>,
		       <&amx3_out_port>, <&amx4_out_port>,
		       <&adx1_out1_port>, <&adx1_out2_port>,
		       <&adx1_out3_port>, <&adx1_out4_port>,
		       <&adx2_out1_port>, <&adx2_out2_port>,
		       <&adx2_out3_port>, <&adx2_out4_port>,
		       <&adx3_out1_port>, <&adx3_out2_port>,
		       <&adx3_out3_port>, <&adx3_out4_port>,
		       <&adx4_out1_port>, <&adx4_out2_port>,
		       <&adx4_out3_port>, <&adx4_out4_port>,
		       <&mix_out1_port>, <&mix_out2_port>, <&mix_out3_port>,
		       <&mix_out4_port>, <&mix_out5_port>,
		       <&asrc_out1_port>, <&asrc_out2_port>, <&asrc_out3_port>,
		       <&asrc_out4_port>, <&asrc_out5_port>, <&asrc_out6_port>,
		       <&ope1_out_port>,
		       /* BE I/O Ports */
		       <&i2s1_port>, <&i2s2_port>, <&i2s4_port>, <&i2s6_port>,
		       <&dmic3_port>;

		label = "NVIDIA Jetson AGX Orin APE";

		widgets = "Microphone",	"CVB-RT MIC Jack",
			  "Microphone",	"CVB-RT MIC",
			  "Headphone",	"CVB-RT HP Jack",
			  "Speaker",	"CVB-RT SPK";

		routing = /* I2S1 <-> RT5640 */
			  "CVB-RT AIF1 Playback",	"I2S1 DAP-Playback",
			  "I2S1 DAP-Capture",		"CVB-RT AIF1 Capture",
			  /* RT5640 codec controls */
			  "CVB-RT HP Jack",		"CVB-RT HPOL",
			  "CVB-RT HP Jack",		"CVB-RT HPOR",
			  "CVB-RT IN1P",		"CVB-RT MIC Jack",
			  "CVB-RT IN2P",		"CVB-RT MIC Jack",
			  "CVB-RT SPK",			"CVB-RT SPOLP",
			  "CVB-RT SPK",			"CVB-RT SPORP",
			  "CVB-RT DMIC1",		"CVB-RT MIC",
			  "CVB-RT DMIC2",		"CVB-RT MIC";

		//cp from overlay dts
		nvidia-audio-card,widgets =
			"Headphone",	"CVB-RT Headphone Jack",
			"Microphone",	"CVB-RT Mic Jack",
			"Speaker",	"CVB-RT Int Spk",
			"Microphone",	"CVB-RT Int Mic";

		nvidia-audio-card,routing =
			"CVB-RT Headphone Jack",     "CVB-RT HPOL",
			"CVB-RT Headphone Jack",     "CVB-RT HPOR",
			"CVB-RT IN1P",		     "CVB-RT Mic Jack",
			"CVB-RT IN2P",		     "CVB-RT Mic Jack",
			"CVB-RT Int Spk",	     "CVB-RT SPOLP",
			"CVB-RT Int Spk",	     "CVB-RT SPORP",
			"CVB-RT DMIC1",		     "CVB-RT Int Mic",
			"CVB-RT DMIC2",		     "CVB-RT Int Mic";

		/* I2S1 dai node */
		nvidia-audio-card,dai-link@76 {
			link-name = "rt5640-playback";
			codec {
				sound-dai = <&rt5640 0>;
				prefix = "CVB-RT";
			};
		};
	};



		i2c@31e0000 {
			status = "okay";

			rt5640: audio-codec@1c {
				status = "okay";
				#sound-dai-cells = <1>;

				compatible = "realtek,rt5640";
				reg = <0x1c>;
				interrupt-parent = <&gpio>;
				interrupts = <TEGRA234_MAIN_GPIO(AC, 5) GPIO_ACTIVE_HIGH>;
				clocks = <&bpmp TEGRA234_CLK_AUD_MCLK>;
				clock-names = "mclk";
				realtek,dmic1-data-pin = <RT5640_DMIC1_DATA_PIN_NONE>;
				realtek,dmic2-data-pin = <RT5640_DMIC2_DATA_PIN_NONE>;
				realtek,jack-detect-source = <RT5640_JD_SRC_HDA_HEADER>;
				sound-name-prefix = "CVB-RT";

				port {
					rt5640_ep: endpoint {
						remote-endpoint = <&i2s1_dap>;
						mclk-fs = <256>;
					};
				};
			};
		};

kernel_log.txt (82.8 KB)

Please refer to Audio Setup and Development — NVIDIA Jetson Linux Developer Guide to see if can help. Thanks

是使用的此驱动源码吗:source/kernel/kernel-jammy-src/sound/soc/codecs/rt5640.c
目前无法获取5640驱动log,我在rt5640_i2c_probe函数中加了log,但内核log并没有打印,是因为驱动没加载吗?但设备树是有该设备的。

source/kernel/kernel-jammy-src/sound/soc/codecs/rt5640.c
static int rt5640_i2c_probe(struct i2c_client *i2c,
		    const struct i2c_device_id *id)
{
	struct rt5640_priv *rt5640;
	int ret;
	unsigned int val;
	pr_err("RT5640 %s: enter \n", __func__);
                i2c@31e0000 {
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        assigned-clock-parents = <0x03 0x66>;
                        assigned-clocks = <0x03 0x37>;
                        clock-frequency = <0x186a0>;
                        clock-names = "div-clk\0parent";
                        clocks = <0x03 0x37 0x03 0x66>;
                        compatible = "nvidia,tegra194-i2c";
                        dma-coherent;
                        dma-names = "rx\0tx";
                        dmas = <0xee 0x1f 0xee 0x1f>;
                        interrupts = <0x00 0x21 0x04>;
                        iommus = <0x04 0x04>;
                        phandle = <0x231>;
                        reg = <0x00 0x31e0000 0x00 0x100>;
                        reset-names = "i2c";
                        resets = <0x03 0x23>;
                        status = "okay";

                        audio-codec@1c {
                                #sound-dai-cells = <0x01>;
                                clock-names = "mclk";
                                clocks = <0x03 0x07>;
                                compatible = "realtek,rt5640";
                                interrupt-parent = <0xf1>;
                                interrupts = <0xa5 0x00>;
                                phandle = <0x232>;
                                realtek,dmic1-data-pin = <0x00>;
                                realtek,dmic2-data-pin = <0x00>;
                                realtek,jack-detect-source = <0x07>;
                                reg = <0x1c>;
                                sound-name-prefix = "CVB-RT";
                                status = "okay";

Hi:
Please try this to setup decoder settings: How can I check the Audio(I2S1) is working correctly? - #14 by jameskuo

照以下方法修改后,耳机能播放了

请问MIC怎么调试?参考以下文档命令不能录音 :
https://docs.nvidia.com/jetson/archives/r35.3.1/DeveloperGuide/text/SD/Communications/AudioSetupAndDevelopment.html#microphone-capture

对于单mic (ALC5640 pin5)来说,是否amixer需要配置mono而不是stereo?

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.