Meanwhile, here are my change code:
tegra_machine_driver_mobile.c
@@ -29,10 +29,16 @@
#include <sound/soc.h>
#include <dt-bindings/sound/tas2552.h>
#include "rt5659.h"
+#include "es8316.h"
#include "sgtl5000.h"
#include "tegra_asoc_machine_alt.h"
#include "tegra210_xbar_alt.h"
+enum {
+ ES8316_SCLK_S_MCLK = 0,
+ ES8316_SCLK_S_PLL1,
+ ES8316_SCLK_S_RCCLK,
+};
#define DRV_NAME "tegra-asoc:"
#define PARAMS(sformat, channels) \
@@ -169,6 +175,8 @@ static const struct snd_soc_dapm_widget tegra_machine_dapm_widgets[] = {
SND_SOC_DAPM_LINE("y Line Out", NULL),
SND_SOC_DAPM_LINE("x Line In", NULL),
SND_SOC_DAPM_LINE("y Line In", NULL),
+ SND_SOC_DAPM_LINE("x IN", NULL),
+ SND_SOC_DAPM_LINE("x OUT",NULL),
};
static struct snd_soc_pcm_stream tegra_machine_asrc_link_params[] = {
@@ -335,13 +343,33 @@ static int tegra_machine_dai_init(struct snd_soc_pcm_runtime *runtime,
aud_mclk = machine->audio_clock.set_aud_mclk_rate;
- pr_debug("pll_a_out0 = %u Hz, aud_mclk = %u Hz, sample rate = %u Hz\n",
+ printk("xiaoz pll_a_out0 = %u Hz, aud_mclk = %u Hz, sample rate = %u Hz\n",
machine->audio_clock.set_pll_out_rate, aud_mclk, srate);
err = tegra_machine_set_params(card, machine, srate, channels, formats);
if (err < 0)
return err;
+ rtd = snd_soc_get_pcm_runtime(card, "es8316-playback"); //wxz
+ if (rtd) {
+ printk("%s===========8316=======es8316-playback=========== %d\n",__func__,__LINE__);
+ dai_params =
+ (struct snd_soc_pcm_stream *)rtd->dai_link->params;
+
+ dai_params->formats = (machine->fmt_via_kcontrol == 2) ?
+ (1ULL << SNDRV_PCM_FORMAT_S32_LE) : formats;
+
+ dai_params->rate_min = srate;
+ //dai_params->channels_min = channels;
+
+ //err = es8316_set_dai_sysclk(rtd->codec_dai, ES8316_SCLK_S_MCLK,aud_mclk, SND_SOC_CLOCK_IN);
+ err = snd_soc_dai_set_sysclk(rtd->codec_dai, ES8316_SCLK_S_MCLK, 12288000,SND_SOC_CLOCK_IN);
+ if (err < 0) {
+ dev_err(card->dev, "codec_dai clock not set\n");
+ return err;
+ }
+ }
+
rtd = snd_soc_get_pcm_runtime(card, "rt565x-playback");
if (rtd) {
dai_params =
@@ -541,6 +569,20 @@ static int tegra_machine_fepi_init(struct snd_soc_pcm_runtime *rtd)
return 0;
}
+static int tegra_machine_es8316_init(struct snd_soc_pcm_runtime *rtd) //wxz
+{
+ struct device *dev = rtd->card->dev;
+ int err;
+
+ err = snd_soc_dai_set_sysclk(rtd->codec_dai, ES8316_SCLK_S_MCLK, 12288000,SND_SOC_CLOCK_IN);
+ if (err) {
+ dev_info(dev, "xiaoz failed to set es8316 sysclk!\n");
+ return err;
+ }
+
+ return 0;
+}
+
static int tegra_machine_rt565x_init(struct snd_soc_pcm_runtime *rtd)
{
struct snd_soc_card *card = rtd->card;
@@ -602,6 +644,8 @@ static int codec_init(struct tegra_machine *machine)
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, "es8316-playback"))
+ dai_links[i].init = tegra_machine_es8316_init;
}
return 0;
@@ -784,8 +828,8 @@ static int tegra_machine_driver_probe(struct platform_device *pdev)
ret = snd_soc_register_card(card);
if (ret) {
- dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
- ret);
+ dev_info(&pdev->dev, "xiaoz %s snd_soc_register_card failed (%d)\n",
+ __FILE__,ret);
tegra194-audio-p3668.dtsi
+ //tegra_i2s5
+ i2s@2901400 {
+ status = "okay";
+ };
+
+ i2s@2901100 {
+ status = "okay";
+ };
+
+ i2c@3160000 {
+ status="okay";
+ es8316_codec: es8316@10 {
+ compatible = "everest,es8316";
+ reg = <0x10>;
+ status = "okay";
+ };
+ };
+
hda@3510000 {
hda,card-name = "tegra-hda-xnx";
status = "okay";
@@ -36,7 +54,7 @@
tegra_sound: sound {
status = "okay";
compatible = "nvidia,tegra-audio-t186ref-mobile-rt565x";
- nvidia,model = "jetson-xaviernx-ape";
+ nvidia,model = "es8316-tegra";
clocks = <&bpmp_clks TEGRA194_CLK_PLLA>,
<&bpmp_clks TEGRA194_CLK_PLLA_OUT0>,
<&bpmp_clks TEGRA194_CLK_AUD_MCLK>;
@@ -68,12 +86,27 @@
mclk-fs = <256>;
+ nvidia,xbar = <&tegra_axbar>;
+
nvidia,dai-link-1 {
name-prefix = "n";
};
hdr40_snd_link_i2s: nvidia,dai-link-5 {
name-prefix = "x";
+
+ link-name = "es8316-playback";
+ codec-dai = <&es8316_codec>;
+ codec-dai-name = "es8316-hifi";
+ format = "i2s";
+ bit-format = "s16_le";
+ cpu-dai-name = "I2S5";
+ //bitclock-master;
+ //frame-master;
+ //bclk_ratio = <0>;
+ //srate = <48000>;
+ //num-channel = <2>;
+ status = "okay";
};
};
tegra194-p3668-common.dtsi
#include <t19x-common-platforms/tegra194-no-pll-aon-clock.dtsi>
#include "tegra194-p3668-pcie-plugin-manager.dtsi"
#include "tegra194-plugin-manager-p3668.dtsi"
+#include <dt-common/jetson/tegra194-p3668-all-p3509-0000.h>
/ {
nvidia,fastboot-usb-vid = <0x0955>;
@@ -582,6 +583,57 @@
soctherm-oc-event {
status = "okay";
};
+
+ //add by xiaoz Audio pinmux
+ pinmux@2430000 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&hdr40_pinmux>;
+
+ hdr40_pinmux: header-40pin-pinmux {
+ pin7 {
+ nvidia,pins = HDR40_PIN7;
+ nvidia,function = HDR40_CLK;
+ nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+ nvidia,tristate = <TEGRA_PIN_DISABLE>;
+ nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+ };
+
+ pin12 {
+ nvidia,pins = HDR40_PIN12;
+ nvidia,function = HDR40_I2S;
+ nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+ nvidia,tristate = <TEGRA_PIN_DISABLE>;
+ nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+ };
+
+ pin35 {
+ nvidia,pins = HDR40_PIN35;
+ nvidia,function = HDR40_I2S;
+ nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+ nvidia,tristate = <TEGRA_PIN_DISABLE>;
+ nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+ };
+
+ pin38 {
+ nvidia,pins = HDR40_PIN38;
+ nvidia,function = HDR40_I2S;
+ nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+ nvidia,tristate = <TEGRA_PIN_ENABLE>;
+ nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+ };
+
+ pin40 {
+ nvidia,pins = HDR40_PIN40;
+ nvidia,function = HDR40_I2S;
+ nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+ nvidia,tristate = <TEGRA_PIN_DISABLE>;
+ nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+ };
+ };
+
+ };
+
};
And this is my debug info:

However, there is no sound when playing music.
I dont know what to do next, can anybody help me?Thank you very much!