Hello Jonathanh,
Could you please attached complete source code tegra186-quill-common.dtsi.txt (33.1 KB) tegra_machine_driver_mobile.c.txt (23.7 KB) .
tlv320aic32x4.c
diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
index 28fdfc5ec544..5dfef68dc9ae 100644
--- a/sound/soc/codecs/tlv320aic32x4.c
+++ b/sound/soc/codecs/tlv320aic32x4.c
@@ -252,6 +252,8 @@ static const struct snd_kcontrol_new in3l_to_rmixer_controls[] = {
static const struct snd_soc_dapm_widget aic32x4_dapm_widgets[] = {
SND_SOC_DAPM_DAC("Left DAC", "Left Playback", AIC32X4_DACSETUP, 7, 0),
+ //SND_SOC_DAPM_DAC("Left DAC", "Playback", AIC32X4_DACSETUP, 7, 0),
+
SND_SOC_DAPM_MIXER("HPL Output Mixer", SND_SOC_NOPM, 0, 0,
&hpl_output_mixer_controls[0],
ARRAY_SIZE(hpl_output_mixer_controls)),
@@ -263,6 +265,8 @@ static const struct snd_soc_dapm_widget aic32x4_dapm_widgets[] = {
SND_SOC_DAPM_PGA("LOL Power", AIC32X4_OUTPWRCTL, 3, 0, NULL, 0),
SND_SOC_DAPM_DAC("Right DAC", "Right Playback", AIC32X4_DACSETUP, 6, 0),
+ //SND_SOC_DAPM_DAC("Right DAC", "Playback", AIC32X4_DACSETUP, 6, 0),
+
SND_SOC_DAPM_MIXER("HPR Output Mixer", SND_SOC_NOPM, 0, 0,
&hpr_output_mixer_controls[0],
ARRAY_SIZE(hpr_output_mixer_controls)),
tegra_machine_driver_mobile.c
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 fbca4699d..67b563cac 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
@@ -30,6 +30,7 @@
#include <dt-bindings/sound/tas2552.h>
#include "rt5659.h"
#include "sgtl5000.h"
+#include "tlv320aic32x4.h"
#include "tegra_asoc_machine_alt.h"
#include "tegra210_xbar_alt.h"
@@ -282,10 +283,11 @@ static int tegra_machine_set_params(struct snd_soc_card *card,
}
static int tegra_machine_dai_init(struct snd_soc_pcm_runtime *runtime,
- unsigned int rate, unsigned int channels,
- u64 formats)
+ int rate, unsigned int channels,
+ u64 formats, bool is_palyback)
{
struct snd_soc_card *card = runtime->card;
+ //struct snd_soc_card *card = rtd->card;
struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
struct snd_soc_pcm_stream *dai_params;
unsigned int aud_mclk, srate;
@@ -310,7 +312,6 @@ static int tegra_machine_dai_init(struct snd_soc_pcm_runtime *runtime,
err = tegra_machine_set_params(card, machine, rate, channels, formats);
if (err < 0)
return err;
-
rtd = snd_soc_get_pcm_runtime(card, "rt565x-playback");
if (rtd) {
dai_params =
@@ -327,6 +328,20 @@ static int tegra_machine_dai_init(struct snd_soc_pcm_runtime *runtime,
return err;
}
}
+//Added TLV320AIC32X4
+ rtd = snd_soc_get_pcm_runtime(card, "ti-capture");
+ if (rtd) {
+ dai_params =
+ (struct snd_soc_pcm_stream *)rtd->dai_link->params;
+ dai_params->rate_min = srate;
+ dai_params->channels_min = channels;
+ dai_params->formats = formats;
+ if (err < 0) {
+ dev_err(card->dev, "codec_dai clock not parashuram set\n");
+ return err;
+ }
+ }
+//Ended
rtd = snd_soc_get_pcm_runtime(card, "rt565x-codec-sysclk-bclk1");
if (rtd) {
@@ -440,10 +455,17 @@ static int tegra_machine_pcm_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_soc_card *card = rtd->card;
int err;
+ bool is_playback;
+
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+ is_playback = true;
+ else
+ is_playback = false;
err = tegra_machine_dai_init(rtd, params_rate(params),
params_channels(params),
- 1ULL << params_format(params));
+ (1ULL << (params_format(params))),
+ is_playback);
if (err < 0) {
dev_err(card->dev, "Failed dai init\n");
return err;
@@ -593,7 +615,22 @@ static int tegra_machine_rt565x_init(struct snd_soc_pcm_runtime *rtd)
return 0;
}
+//Added tlv320aic32x4
+static int tegra_machine_aic32x4_init(struct snd_soc_pcm_runtime *rtd)
+{
+ struct device *dev = rtd->card->dev;
+ int err;
+
+ err = snd_soc_dai_set_sysclk(rtd->codec_dai, AIC32X4_FREQ_12000000, 12000000,
+ SND_SOC_CLOCK_IN);
+ if (err) {
+ dev_err(dev, "failed to set aic32x4 sysclk!\n");
+ return err;
+ }
+ return 0;
+}
+//Ended
static int codec_init(struct tegra_machine *machine)
{
struct snd_soc_dai_link *dai_links = machine->asoc->dai_links;
@@ -611,6 +648,8 @@ static int codec_init(struct tegra_machine *machine)
dai_links[i].init = tegra_machine_rt565x_init;
else if (strstr(dai_links[i].name, "fe-pi-audio-z-v2"))
dai_links[i].init = tegra_machine_fepi_init;
+ else if (strstr(dai_links[i].name, "ti-capture"))
+ dai_links[i].init = tegra_machine_aic32x4_init;
}
return 0;
Device tree changes
diff --git a/kernel-dts/t18x-common-platforms/tegra186-quill-common.dtsi b/kernel-dts/t18x-common-platforms/tegra186-quill-common.dtsi
old mode 100644
new mode 100755
index 9416a21..331befc
--- a/kernel-dts/t18x-common-platforms/tegra186-quill-common.dtsi
+++ b/kernel-dts/t18x-common-platforms/tegra186-quill-common.dtsi
@@ -166,6 +166,16 @@
rom-val = /bits/ 8 <0x05>;
};
};
+ aic32x4: tlv320aic32x4.1-0018@18 {
+ compatible = "ti,tlv320aic32x4";
+ status = "okay";
+ reg = <0x18>;
+ clocks = <&tegra_car TEGRA186_CLK_AUD_MCLK>;
+ clock-names = "mclk";
+ dv-supply = <&battery_reg>;
+ av-supply = <&battery_reg>;
+ iov-supply = <&battery_reg>;
+ };
};
i2c@c240000 {
@@ -668,7 +678,8 @@
#endif
ahub {
/* I2S6 */
- i2s@2901500 {
+ i2s@2901100 {
+ status = "okay";
bclk-ratio = <4>;
};
@@ -695,60 +706,41 @@
tegra_sound: sound {
compatible = "nvidia,tegra-audio-t186ref-mobile-rt565x";
nvidia,model = "tegra-snd-t186ref-mobile-rt565x";
- nvidia,num-codec-link = <12>;
- clocks = <&tegra_car TEGRA186_CLK_PLLA>,
- <&tegra_car TEGRA186_CLK_PLL_A_OUT0>,
- <&tegra_car TEGRA186_CLK_AUD_MCLK>;
- clock-names = "pll_a", "pll_a_out0", "extern1";
- assigned-clocks = <&tegra_car TEGRA186_CLK_PLL_A_OUT0>,
- <&tegra_car TEGRA186_CLK_AUD_MCLK>;
- assigned-clock-parents = <&tegra_car TEGRA186_CLK_PLLA>,
- <&tegra_car TEGRA186_CLK_PLL_A_OUT0>;
- resets = <&tegra_car TEGRA186_RESET_AUD_MCLK>;
+ nvidia,num-codec-link = <13>;
+ clocks = <&tegra_car TEGRA186_CLK_PLLA>,
+ <&tegra_car TEGRA186_CLK_PLL_A_OUT0>,
+ <&tegra_car TEGRA186_CLK_AHUB>,
+ <&tegra_car TEGRA186_CLK_AUD_MCLK>;
+ clock-names = "pll_a", "pll_a_out0", "ahub", "extern1";
+
+ /*assigned-clocks = <&tegra_car TEGRA186_CLK_PLL_A_OUT0>,
+ <&tegra_car TEGRA186_CLK_AHUB>,
+ <&tegra_car TEGRA186_CLK_AUD_MCLK>;
+ assigned-clock-parents = <&tegra_car TEGRA186_CLK_PLLA>,
+ <&tegra_car TEGRA186_CLK_PLL_A_OUT0>,
+ <&tegra_car TEGRA186_CLK_PLL_A_OUT0>,
+ <&tegra_car TEGRA186_CLK_PLLP_OUT0>;
+ assigned-clock-rates = <0>, <0>, <12000000>;*/
+ assigned-clocks = <&tegra_car TEGRA186_CLK_PLL_A_OUT0>, <&tegra_car TEGRA186_CLK_AUD_MCLK>;
+ assigned-clock-parents = <&tegra_car TEGRA186_CLK_PLLA>, <&tegra_car TEGRA186_CLK_PLLP_OUT0>;
+ assigned-clock-rates = <0>, <12000000>;
+
+ resets = <&tegra_car TEGRA186_RESET_AUD_MCLK>;
reset-names = "extern1_rst";
status = "okay";
nvidia,audio-routing =
- "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",
- "n Headphone", "n OUT",
- "n IN", "n Mic",
- "o Headphone", "o OUT",
- "o IN", "o Mic",
- "a IN", "a Mic",
- "b IN", "b Mic",
- "c IN", "c Mic",
- "d IN", "d Mic",
- "d1 Headphone", "d1 OUT",
- "d3 Headphone", "d3 OUT";
-
+ "z Headphone", "z LOL",
+ "z Headphone", "z LOR",
+ "z IN1_L", "z Mic",
+ "z IN1_R", "z Mic";
nvidia,xbar = <&tegra_axbar>;
- mclk-fs = <256>;
+ //mclk-fs = <256>;
rt565x_dai_link: nvidia,dai-link-1 {
link-name = "spdif-dit-0";
- cpu-dai = <&tegra_i2s1>;
- codec-dai = <&spdif_dit0>;
- cpu-dai-name = "I2S1";
- codec-dai-name = "dit-hifi";
- format = "i2s";
- bit-format = "s16_le";
- srate = <48000>;
- num-channel = <2>;
- ignore_suspend;
- name-prefix = "x";
- status = "okay";
- };
- nvidia,dai-link-2 {
- link-name = "spdif-dit-1";
cpu-dai = <&tegra_i2s2>;
- codec-dai = <&spdif_dit1>;
+ codec-dai = <&spdif_dit0>;
cpu-dai-name = "I2S2";
codec-dai-name = "dit-hifi";
format = "i2s";
@@ -756,7 +748,7 @@
srate = <48000>;
num-channel = <2>;
ignore_suspend;
- name-prefix = "y";
+ name-prefix = "x";
status = "okay";
};
nvidia,dai-link-3 {
@@ -770,8 +762,8 @@
srate = <48000>;
num-channel = <2>;
ignore_suspend;
- name-prefix = "z";
- status = "okay";
+ name-prefix = "a";
+ status = "disabled";
};
nvidia,dai-link-4 {
link-name = "spdif-dit-3";
@@ -785,7 +777,7 @@
num-channel = <2>;
ignore_suspend;
name-prefix = "m";
- status = "okay";
+ status = "disabled";
};
nvidia,dai-link-5 {
link-name = "spdif-dit-4";
@@ -799,7 +791,7 @@
num-channel = <2>;
ignore_suspend;
name-prefix = "n";
- status = "okay";
+ status = "disabled";
};
nvidia,dai-link-6 {
link-name = "spdif-dit-6";
@@ -816,7 +808,7 @@
num-channel = <1>;
ignore_suspend;
name-prefix = "o";
- status = "okay";
+ status = "disabled";
};
nvidia,dai-link-7 {
link-name = "spdif-dit-7";
@@ -830,7 +822,7 @@
ignore_suspend;
num-channel = <2>;
name-prefix = "a";
- status = "okay";
+ status = "disabled";
};
nvidia,dai-link-8 {
link-name = "spdif-dit-8";
@@ -844,7 +836,7 @@
ignore_suspend;
num-channel = <2>;
name-prefix = "b";
- status = "okay";
+ status = "disabled";
};
nvidia,dai-link-9 {
link-name = "spdif-dit-9";
@@ -858,7 +850,7 @@
ignore_suspend;
num-channel = <2>;
name-prefix = "c";
- status = "okay";
+ status = "disabled";
};
nvidia,dai-link-10 {
link-name = "spdif-dit-10";
@@ -872,7 +864,7 @@
ignore_suspend;
num-channel = <2>;
name-prefix = "d";
- status = "okay";
+ status = "disabled";
};
nvidia,dai-link-11 {
link-name = "dspk1-playback";
@@ -886,7 +878,7 @@
num-channel = <2>;
ignore_suspend;
name-prefix = "d3";
- status = "okay";
+ status = "disabled";
};
dspk_1_dai_link: nvidia,dai-link-12 {
link-name = "dspk-playback-l";
@@ -914,10 +906,31 @@
num-channel = <2>;
ignore_suspend;
name-prefix = "d2";
- status = "okay";
- };
- };
+ status = "disabled";
+ };
+ nvidia,dai-link-2 {
+ link-name = "ti-capture";
+ cpu-dai = <&tegra_i2s1>;
+ codec-dai = <&aic32x4>;
+ cpu-dai-name = "I2S1";
+ codec-dai-name = "tlv320aic32x4-hifi";
+ tx-mask = <0xFF>;
+ rx-mask = <0xFF>;
+ format = "i2s";
+ bitclock-master;
+ frame-master;
+ bitclock-noninversion;
+ frame-noninversion;
+ bit-format = "s16_le";
+ bclk_ratio = <1>;
+ srate = <44100>;
+ num-channel = <2>;
+ ignore_suspend;
+ name-prefix = "z";
+ status = "okay";
+ };
+ };
backlight {
status = "okay";
panel-s-wuxga-8-0-bl {
I’m wondering why it’s not getting detected ti codec. could you please have look into my code and help me out.
Regards,
Parashuram