Hello,
I am trying to enable an external audio codec TLV320AIC3109 on a Jetson Orin NX module running Jetson Linux (L4T) R36.4.4 (JetPack 6.x).
Hardware / connections:
- Module: Jetson Orin NX
- Codec: TLV320AIC3109 (driver compatible: “ti,tlv320aic3x”)
- I2C bus: /bus@0/i2c@3160000, codec address 0x18
- Audio interface: I2S2 (DAP2) at /bus@0/aconnect@2900000/ahub@2900800/i2s@2901100
- MCLK pin configured on soc_gpio59_pac6 (function “aud”)
- Fixed regulators: AVDD=3.3V, DVDD/IOVDD=1.8V
Software:
- Jetson Linux / L4T: R36.4.4
- Using ASoC audio graph card: “nvidia,tegra186-audio-graph-card”
Problem:
The codec does not work (no functional audio). I will attach my DTS overlay/snippet. Could someone please review the DTS for correctness (audio graph card dai-link, I2S2 configuration, pinmux/pinctrl, clocks/MCLK expectations, and power supplies)?
#include <dt-bindings/clock/tegra234-clock.h>
#include <dt-bindings/pinctrl/pinctrl-tegra.h>
/ {
codec_avdd: regulator-codec-avdd {
compatible = "regulator-fixed";
regulator-name = "codec-avdd";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
codec_dvdd: regulator-codec-dvdd {
compatible = "regulator-fixed";
regulator-name = "codec-dvdd";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
tegra_sound: sound {
compatible = "nvidia,tegra186-audio-graph-card";
clocks = <&bpmp TEGRA234_CLK_PLLA>;
clock-names = "pll_a";
status = "okay";
nvidia-audio-card,name = "TLV320AIC3109 on Orin NX";
nvidia-audio-card,dai-link@0 {
status = "okay";
link-type = <0>;
format = "i2s";
cpu {
sound-dai = <&tegra_i2s2 0>;
dai-format = "i2s";
bitclock-master = <&tegra_i2s2>;
frame-master = <&tegra_i2s2>;
};
codec {
sound-dai = <&tlv320aic3109>;
prefix = "TLV";
};
};
};
bus@0 {
pinmux@2430000 {
dap2_active_state: dap2-active-pins {
dap2_sclk {
nvidia,pins = "soc_gpio41_ph7";
nvidia,function = "i2s2";
nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_DISABLE>;
nvidia,lpdr = <TEGRA_PIN_DISABLE>;
};
dap2_dout {
nvidia,pins = "soc_gpio42_pi0";
nvidia,function = "i2s2";
nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_DISABLE>;
nvidia,lpdr = <TEGRA_PIN_DISABLE>;
};
dap2_din {
nvidia,pins = "soc_gpio43_pi1";
nvidia,function = "i2s2";
nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
nvidia,tristate = <TEGRA_PIN_ENABLE>;
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
nvidia,lpdr = <TEGRA_PIN_DISABLE>;
};
dap2_fs {
nvidia,pins = "soc_gpio44_pi2";
nvidia,function = "i2s2";
nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_DISABLE>;
nvidia,lpdr = <TEGRA_PIN_DISABLE>;
};
};
mclk_active_state: mclk-active-pins {
mclk_pac6 {
nvidia,pins = "soc_gpio59_pac6";
nvidia,function = "aud";
nvidia,pull = <TEGRA_PIN_PULL_NONE>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_DISABLE>;
nvidia,lpdr = <TEGRA_PIN_DISABLE>;
};
};
};
i2c@3160000 {
status = "okay";
tlv320aic3109: codec@18 {
compatible = "ti,tlv320aic3x";
reg = <0x18>;
status = "okay";
#sound-dai-cells = <0>;
ai3x-micbias-vg = <2>;
AVDD-supply = <&codec_avdd>;
DRVDD-supply = <&codec_avdd>;
DVDD-supply = <&codec_dvdd>;
IOVDD-supply = <&codec_dvdd>;
};
};
aconnect@2900000 {
status = "okay";
ahub@2900800 {
status = "okay";
tegra_i2s2: i2s@2901100 {
status = "okay";
#sound-dai-cells = <1>;
pinctrl-names = "default";
pinctrl-0 = <&dap2_active_state &mclk_active_state>;
};
};
};
};
};
- Is “nvidia,tegra186-audio-graph-card” the correct approach on Orin (t234) for a simple I2S codec like AIC3109?
- Are the dai-link properties (format, master/slave settings, sound-dai phandles) correct for I2S2 on t234?
- Is the MCLK pin configuration sufficient, or do I need additional clock nodes / assigned-clocks settings for the codec to get a valid MCLK?
- Anything obviously missing in the DTS (routing, widgets, jack, etc.) that could prevent the card/codec from probing correctly?
Thank you for any help.