Hi spujar
I just rolled back a few changes below and Mic loopback recording worked:
1, sound driver directory: ‘sources/kernel/nvidia/sound’
diff --git a/sound/soc/tegra-alt/Kconfig b/sound/soc/tegra-alt/Kconfig
index 0bffefce8..759dfe97a 100644
--- a/sound/soc/tegra-alt/Kconfig
+++ b/sound/soc/tegra-alt/Kconfig
@@ -176,7 +176,6 @@ config SND_SOC_TEGRA_T186REF_ALT
select SND_SOC_TEGRA_ASOC_HWDEP_ALT
select SND_SOC_SPDIF
select SND_SOC_COMPRESS
- select SND_SOC_ES8316
help
Say Y or M here.
@@ -206,7 +205,6 @@ config SND_SOC_TEGRA210_AUDIO_ALT
select SND_SOC_RT5640
select SND_SOC_RT5659
select SND_SOC_SGTL5000
- select SND_SOC_ES8316
help
Say Y or M here if you want to enable support for ASoC machine driver on
Tegra210 and successor platforms like Tegra186, Tegra194.
diff --git a/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c b/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c
index 98f592979..b2e8fa27c 100644
--- a/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c
+++ b/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c
@@ -29,16 +29,10 @@
#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) \
@@ -175,8 +169,6 @@ 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[] = {
@@ -194,7 +186,6 @@ static int tegra_machine_codec_get_rate(struct snd_kcontrol *kcontrol,
struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
-printk("%s %d=========================================\n",__func__,__LINE__);
ucontrol->value.integer.value[0] = machine->rate_via_kcontrol;
return 0;
@@ -218,7 +209,6 @@ static int tegra_machine_codec_get_format(struct snd_kcontrol *kcontrol,
struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
-printk("%s %d=========================================\n",__func__,__LINE__);
ucontrol->value.integer.value[0] = machine->fmt_via_kcontrol;
return 0;
@@ -230,7 +220,6 @@ static int tegra_machine_codec_put_format(struct snd_kcontrol *kcontrol,
struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
-printk("%s %d=========================================\n",__func__,__LINE__);
/* set the format control flag */
machine->fmt_via_kcontrol = ucontrol->value.integer.value[0];
@@ -248,9 +237,9 @@ static int tegra_machine_set_params(struct snd_soc_card *card,
int idx = 0, err = 0;
u64 format_k;
- int num_of_dai_links = machine->soc_data->num_ahub_links + machine->num_codec_links;
+ int num_of_dai_links = machine->soc_data->num_ahub_links +
+ machine->num_codec_links;
-printk("%s %d=========================================\n",__func__,__LINE__);
format_k = (machine->fmt_via_kcontrol == 2) ?
(1ULL << SNDRV_PCM_FORMAT_S32_LE) : formats;
@@ -308,13 +297,9 @@ static int tegra_machine_dai_init(struct snd_soc_pcm_runtime *runtime,
int err, sample_size;
struct snd_soc_pcm_runtime *rtd;
-printk("%s %d rate:%d=========================================\n",__func__,__LINE__,rate);
-#if 0
srate = (machine->rate_via_kcontrol) ?
tegra_machine_srate_values[machine->rate_via_kcontrol] :
rate;
-#endif
- srate = rate;
switch (formats) {
case SNDRV_PCM_FORMAT_S8:
@@ -350,33 +335,13 @@ printk("%s %d rate:%d=========================================\n",__func__,__LIN
aud_mclk = machine->audio_clock.set_aud_mclk_rate;
- printk("pll_a_out0 = %u Hz, aud_mclk = %u Hz, sample rate = %u Hz\n",
+ pr_debug("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===========20211015 %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 =
@@ -446,7 +411,6 @@ static int tegra_machine_pcm_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_card *card = rtd->card;
int err;
-printk("%s %d=========================================\n",__func__,__LINE__);
err = tegra_machine_dai_init(rtd, params_rate(params),
params_channels(params),
params_format(params));
@@ -463,7 +427,6 @@ static int tegra_machine_pcm_startup(struct snd_pcm_substream *substream)
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct tegra_machine *machine = snd_soc_card_get_drvdata(rtd->card);
-printk("%s %d=========================================\n",__func__,__LINE__);
tegra_alt_asoc_utils_clk_enable(&machine->audio_clock);
return 0;
@@ -474,7 +437,6 @@ static void tegra_machine_pcm_shutdown(struct snd_pcm_substream *substream)
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct tegra_machine *machine = snd_soc_card_get_drvdata(rtd->card);
-printk("%s %d=========================================\n",__func__,__LINE__);
tegra_alt_asoc_utils_clk_disable(&machine->audio_clock);
}
@@ -482,7 +444,6 @@ static int tegra_machine_suspend_pre(struct snd_soc_card *card)
{
struct snd_soc_pcm_runtime *rtd;
-printk("%s %d=========================================\n",__func__,__LINE__);
/* DAPM dai link stream work for non pcm links */
list_for_each_entry(rtd, &card->rtd_list, list) {
if (rtd->dai_link->params)
@@ -551,7 +512,6 @@ static int tegra_machine_respeaker_init(struct snd_soc_pcm_runtime *rtd)
struct device *dev = rtd->card->dev;
int err;
-printk("%s %d=========================================\n",__func__,__LINE__);
/* ac108 codec driver hardcodes the freq as 24000000
* and source as PLL irrespective of args passed through
* this callback
@@ -571,7 +531,6 @@ static int tegra_machine_fepi_init(struct snd_soc_pcm_runtime *rtd)
struct device *dev = rtd->card->dev;
int err;
-printk("%s %d=========================================\n",__func__,__LINE__);
err = snd_soc_dai_set_sysclk(rtd->codec_dai, SGTL5000_SYSCLK, 12288000,
SND_SOC_CLOCK_IN);
if (err) {
@@ -582,29 +541,12 @@ printk("%s %d=========================================\n",__func__,__LINE__);
return 0;
}
-static int tegra_machine_es8316_init(struct snd_soc_pcm_runtime *rtd) //wxz
-{
- struct device *dev = rtd->card->dev;
- int err;
-
-printk("%s %d=========================================\n",__func__,__LINE__);
- //err = es8316_set_dai_sysclk(rtd->codec_dai, ES8316_SCLK_S_MCLK, 11289600,SND_SOC_CLOCK_IN);
- err = snd_soc_dai_set_sysclk(rtd->codec_dai, ES8316_SCLK_S_MCLK, 12288000,SND_SOC_CLOCK_IN);
- if (err) {
- dev_err(dev, "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;
struct snd_soc_jack *jack;
int err;
-printk("%s %d=========================================\n",__func__,__LINE__);
jack = devm_kzalloc(card->dev, sizeof(struct snd_soc_jack), GFP_KERNEL);
if (!jack)
return -ENOMEM;
@@ -649,7 +591,6 @@ static int codec_init(struct tegra_machine *machine)
if (!dai_links || !num_links)
return -EINVAL;
-printk("%s %d=========================================\n",__func__,__LINE__);
for (i = 0; i < num_links; i++) {
if (!dai_links[i].name)
continue;
@@ -661,8 +602,6 @@ printk("%s %d=========================================\n",__func__,__LINE__);
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")) //wxz
- dai_links[i].init = tegra_machine_es8316_init;
}
return 0;
@@ -686,7 +625,6 @@ static void set_dai_ops(struct tegra_machine *machine)
{
int i;
-printk("%s %d=========================================\n",__func__,__LINE__);
/* set ADMAIF dai_ops */
for (i = machine->soc_data->admaif_dai_link_start;
i <= machine->soc_data->admaif_dai_link_end; i++)
@@ -725,7 +663,6 @@ static int add_dai_links(struct platform_device *pdev)
struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
int ret;
-printk("%s %d=========================================\n",__func__,__LINE__);
machine->asoc = devm_kzalloc(&pdev->dev, sizeof(*machine->asoc),
GFP_KERNEL);
if (!machine->asoc)
@@ -847,8 +784,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) %s %d\n",
- ret,__FILE__,__LINE__);
+ dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
+ ret);
goto cleanup_asoc;
}
2, dts file ‘tegra194-audio-p3668.dtsi’
diff --git a/common/tegra194-audio-p3668.dtsi b/common/tegra194-audio-p3668.dtsi
index 48a3289..32ea0bd 100644
--- a/common/tegra194-audio-p3668.dtsi
+++ b/common/tegra194-audio-p3668.dtsi
@@ -36,7 +36,7 @@
tegra_sound: sound {
status = "okay";
compatible = "nvidia,tegra-audio-t186ref-mobile-rt565x";
- nvidia,model = "es8316-tegra";
+ nvidia,model = "jetson-xaviernx-ape";
clocks = <&bpmp_clks TEGRA194_CLK_PLLA>,
<&bpmp_clks TEGRA194_CLK_PLLA_OUT0>,
<&bpmp_clks TEGRA194_CLK_AUD_MCLK>;
@@ -47,11 +47,11 @@
<&bpmp_clks TEGRA194_CLK_PLLA_OUT0>;
nvidia,audio-routing =
- "x Headphone", "x HPOL",
- "x Headphone", "x HPOR",
- "y Headphone", "y OUT",
- "y IN", "y Mic",
- "z Headphone", "z OUT",
+ "x Headphone", "x OUT",
+ "x IN", "x Mic",
+ "y Headphone", "y OUT",
+ "y IN", "y Mic",
+ "z Headphone", "z OUT",
"z IN", "z Mic",
"m Headphone", "m OUT",
"m IN", "m Mic",
@@ -66,10 +66,6 @@
"d1 Headphone", "d1 OUT",
"d2 Headphone", "d2 OUT";
-
-
- nvidia,xbar = <&tegra_axbar>;
-
mclk-fs = <256>;
nvidia,dai-link-1 {
@@ -78,10 +74,6 @@
hdr40_snd_link_i2s: nvidia,dai-link-5 {
name-prefix = "x";
- link-name = "es8316-playback";
- codec-dai = <&es8316_codec>;
- codec-dai-name = "es8316-hifi";
- status = "okay";
};
};
amixer -c jetsonxaviernxa cset name=“I2S1 Mux” “ADMAIF1”
amixer -c jetsonxaviernxa cset name=“ADMAIF1 Mux” “I2S5”
amixer -c jetsonxaviernxa cset name=“I2S5 Loopback” “on”
aplay -Dhw:jetsonxaviernxa,0 music.wav &
arecord -Dhw:jetsonxaviernxa,0 -f S16_LE -c 2 -r 44100 -d 5 cap.wav
‘cap.wav’ file is OK , this file can be played for 5 seconds.
Why does es8316 report an error when recording, please give me a guide.
Thanks.