Jetson T5000 使用 es8390 codec 没有 APE 声卡

  1. 自制底板
  2. jetson_r38.2.1
  3. 使用 i2s1
  4. dts 配置
                aconnect@9000000 {
                        status = "okay";

                        ahub@9630000 {
                                status = "okay";

                                i2s@9280000 {
                                        status = "okay";
                                        ports {
                                                port@1 {
                                                        endpoint {
                                                                dai-format = "i2s";
                                                                remote-endpoint = <&es8389_ep>;
                                                                bitclock-master;
                                                                frame-master;
                                                        };
                                                };
                                        };
                                };

                };
es8389: audio-codec@10 {
                                status = "okay";
                                clocks = <&bpmp TEGRA264_CLK_AUD_MCLK>;
                                clock-names = "mclk";
                                compatible = "everest,es8389";
                                reg = <0x10>;
                                #sound-dai-cells = <1>;

                                sound-name-prefix = "CVB-RT";

                                port {
                                        es8389_ep: endpoint {
                                                remote-endpoint = <&i2s1_dap>;
                                                mclk-fs = <256>;
                                                link-name = "es8389-playback";
                                        };
                                };

                        };
        tegra_sound: sound {
                status = "okay";

                label = "NVIDIA Jetson Thor AGX APE";

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

                routing =
                        "CVB-RT Headphone", "CVB-RT HPOL",
                        "CVB-RT Headphone", "CVB-RT HPOR",
                        "CVB-RT INPUT1", "CVB-RT MIC",
                        "CVB-RT INPUT2", "CVB-RT MIC";
        };
diff --git a/sound/soc/tegra/tegra_codecs.c b/sound/soc/tegra/tegra_codecs.c
index 554c951960f0..044362ecebb8 100644
--- a/sound/soc/tegra/tegra_codecs.c
+++ b/sound/soc/tegra/tegra_codecs.c

@@ -324,6 +340,8 @@ int tegra_codecs_init(struct snd_soc_card *card)
                        dai_links[i].init = tegra_machine_fepi_init;
                else if (strstr(dai_links[i].name, "respeaker-4-mic-array"))
                        dai_links[i].init = tegra_machine_respeaker_init;
+               else if (strstr(dai_links[i].name, "es8389-playback"))
+                        dai_links[i].init = tegra_machine_fepi_init_es8390;
        }
 
        return 0;
  1. cat /proc/asound/cards
 0 [HDA            ]: tegra-hda - NVIDIA Jetson Thor AGX HDA
                      NVIDIA Jetson Thor AGX HDA at 0x88090b8000 irq 252
  1. log会提示 platform sound: deferred probe pending: tegra-audio-graph-card: parse error

Could you use the below sound node instead of the one you pasted above

	sound {
		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>,
		       <&admaif20_port>, <&admaif21_port>, <&admaif22_port>, <&admaif23_port>,
		       <&admaif24_port>, <&admaif25_port>, <&admaif26_port>, <&admaif27_port>,
		       <&admaif28_port>, <&admaif29_port>, <&admaif30_port>, <&admaif31_port>,
		       /* XBAR Ports */
		       <&xbar_i2s1_port>, <&xbar_i2s4_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_amx5_in1_port>, <&xbar_amx5_in2_port>,
		       <&xbar_amx5_in3_port>, <&xbar_amx5_in4_port>,
		       <&xbar_amx6_in1_port>, <&xbar_amx6_in2_port>,
		       <&xbar_amx6_in3_port>, <&xbar_amx6_in4_port>,
		       <&xbar_adx1_in_port>, <&xbar_adx2_in_port>,
		       <&xbar_adx3_in_port>, <&xbar_adx4_in_port>,
		       <&xbar_adx5_in_port>, <&xbar_adx6_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>,
		       <&amx5_out_port>, <&amx6_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>,
		       <&adx5_out1_port>, <&adx5_out2_port>,
		       <&adx5_out3_port>, <&adx5_out4_port>,
		       <&adx6_out1_port>, <&adx6_out2_port>,
		       <&adx6_out3_port>, <&adx6_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>, <&i2s4_port>;

		label = "NVIDIA Jetson Thor AGX APE";

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

		routing = /* Enable I2S1 <-> ES8390 */
			  "CVB-RT AIF1 Playback",	"I2S1 DAP-Playback",
			  "I2S1 DAP-Capture",		"CVB-RT AIF1 Capture",
			  /* ES8390 codec controls */
              "CVB-RT Headphone", "CVB-RT HPOL",
              "CVB-RT Headphone", "CVB-RT HPOR",
              "CVB-RT INPUT1", "CVB-RT MIC",
              "CVB-RT INPUT2", "CVB-RT MIC";
	};

Also attach the kernel log if you still see the issue.

dmesg.log (120.5 KB)

还是会打印 [ 25.738220] platform sound: deferred probe pending: tegra-audio-graph-card: parse error

Could you please attach the DTS file were you made change

dts.zip (6.5 KB)

A quick question, the codec es8390 codec node uses TEGRA264_CLK_AUD_MCLK (i.e AUD_MCLK clock). Is this a custom carrier board were you made aud_mclk connected to ES8390 codec master clock pin?

MCLK01_AUDIO_MCLK (MCLK01) 连接到 ES8390的MCLK

Could you please replace the attached DT files on your tree and give a try.

dts_modified.zip (6.1 KB)

  1. 没有打印 platform sound: deferred probe pending: tegra-audio-graph-card: parse error
  2. 但是还是没有声卡
[   12.101511] es8389 9-0010: ASoC: error at snd_soc_dai_set_sysclk on ES8389 HiFi: -22
[   12.101537] es8389 9-0010: simple-card: set_sysclk error
[   12.102252]  es8389-playback: ASoC: error at snd_soc_link_init on es8389-playback: -22

Probe deferred is not harmful, as kernel might re probe later once all dependencies met.

Could you make changes to remove snd_soc_dai_set_sysclk related error, you can refer bsp doc on how to make this call from machine driver based on the codec used.

  1. 声卡有了
  2. 播放音频是,MCLK01_AUDIO_MCLK (MCLK01) 一直是 45158377
root@tegra-ubuntu:/home/nvidia# cat /sys/kernel/debug/clk/clk_summary | grep mclk
          aud_mclk                   1       1        0        45158377    0          0     50000      Y            9-0010                          mclk
  1. sound/soc/tegra/tegra_codecs.c 已经设置了snd_soc_dai_set_sysclk(rtd->dais[rtd->dai_link->num_cpus],
    0, 12288000, SND_SOC_CLOCK_IN);

Hi,

AUD_MCLK would change based on the sampling rate of the wave file played. If the codec need fixed MCLK we need to set a DT property to make it fixed rate.

Do the below change

                            port {
                                    es8389_ep: endpoint {
                                            remote-endpoint = <&i2s1_dap>;
                                            mclk-fs = <256>;
                                            link-name = "es8389-playback";
                                    };
                            };

Remove the “mclk-fs=<256>;” entry from above node.

2. add the below entry in the sound {} node

 	assigned-clock-rates = <983040000>,<49152000>,<12288000>;

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