No Sound card

hi,
Jetson Xavier NX JP5.02 failed to adapt to audio, here are my modifications:
一.tegra194-audio-p3668.dtsi:

  1. i2c@3160000 {
    status = “okay”;
    rt5640: rt5640.8-001c@1c {
    compatible = “realtek,rt5640”;
    reg = <0x1c>;
    clock-frequency = <200000>;
    /* Codec IRQ output */
    interrupt-parent = <&tegra_main_gpio>;
    interrupts = <&tegra_main_gpio TEGRA194_MAIN_GPIO(Q, 5) GPIO_ACTIVE_HIGH>;
 	sound-name-prefix = "CVB-RT";
 	#sound-dai-cells = <1>;			
 	status = "okay";
 };

};

  1. sound {

    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";

 nvidia-audio-card,mclk-fs = <256>;

};
3. hdr40_snd_link_i2s: &i2s5_to_codec {
link-name = “rt5640_playback”;
ignore_suspend;
bitclock-master;
frame-master;

format = “i2s”;
codec-dai-name = “rt5640-aif1”;
bit-format = “s16_le”;
srate = <48000>;
num-channel = <2>;
ignore_suspend;

codec {
sound-dai = <&rt5640 0>;
prefix = “CVB-RT”;
};
};
二.tegra_machine_driver.c

  1. Add: #include “rt5640.h”
    2.tegra_machine_dai_init Add:
    rtd = snd_soc_get_pcm_runtime(card, “rt5640-playback”);
    if (rtd) {
    err = snd_soc_dai_set_sysclk(rtd->codec_dai, RT5640_SCLK_S_MCLK,
    aud_mclk, SND_SOC_CLOCK_IN);
    if (err < 0) {
    dev_err(card->dev, “codec_dai clock not set\n”);
    return err;
    }
    }
  2. Add function tegra_machine_rt5640_init:
    static int tegra_machine_rt5640_init(struct snd_soc_pcm_runtime *rtd)
    {
    struct snd_soc_card *card = rtd->card;
    struct snd_soc_jack *jack;
    int err;

jack = devm_kzalloc(card->dev, sizeof(struct snd_soc_jack), GFP_KERNEL);
if (!jack)
return -ENOMEM;

err = snd_soc_card_jack_new(card, “Headset Jack”, SND_JACK_HEADSET,
jack, NULL, 0);
if (err) {
dev_err(card->dev, “Headset Jack creation failed %d\n”, err);
return err;
}

err = tegra_machine_add_codec_jack_control(card, rtd, jack);
if (err) {
dev_err(card->dev, “Failed to add jack control: %d\n”, err);
return err;
}

err = rt5640_set_jack_detect(rtd->codec, jack);
if (err) {
dev_err(card->dev, “Failed to set jack for RT5640: %d\n”, err);
return err;
}

/* single button supporting play/pause */
snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_MEDIA);

/* multiple buttons supporting play/pause and volume up/down */
snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_MEDIA);
snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP);
snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN);

snd_soc_dapm_sync(&card->dapm);

return 0;
}
4. codec_init function:
for (i = 0; i < num_links; i++) {
if (!dai_links[i].name)
continue;
if (strstr(dai_links[i].name, “rt5640-playback”) )
dai_links[i].init = tegra_machine_rt5640_init;
else if (strstr(dai_links[i].name, “rt565x-playback”) ||
strstr(dai_links[i].name, “rt565x-codec-sysclk-bclk1”))
dai_links[i].init = tegra_machine_rt565x_init;
三.Result:
1.Mixer control settings:
setting.txt (794.1 KB)
2.Kernel log:
kernel_log (89.9 KB)
3.Device tree log:
dt.log (364.4 KB)
4.Register dump of I2S5 being used:
reg_dump (585 Bytes)

Thanks

Duplicated with your previous post, our team will intestigate and update at Audio nosound card - Jetson & Embedded Systems / Jetson Xavier NX - NVIDIA Developer Forums

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