[PATCH v4 23/23] arm64: tegra: Add support for APE sound card on Jetson Nano and TX1

From: Sameer Pujar
Date: Sat Jun 27 2020 - 00:56:28 EST


This adds APE sound card support on Jetson Nano and TX1 which is based
on simple-card driver. Earlier in the series simple-card driver is
enhanced to work with multiple ASoC components. Based on board design
required I/O interfaces are exposed for I2S and DMIC. More complicated
audio paths will be added going forward.

Signed-off-by: Sameer Pujar <spujar@xxxxxxxxxx>
---
arch/arm64/boot/dts/nvidia/tegra210-p2371-2180.dts | 94 ++++++++++++++++++++++
arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts | 49 +++++++++++
arch/arm64/boot/dts/nvidia/tegra210.dtsi | 67 +++++++++++++++
3 files changed, 210 insertions(+)

diff --git a/arch/arm64/boot/dts/nvidia/tegra210-p2371-2180.dts b/arch/arm64/boot/dts/nvidia/tegra210-p2371-2180.dts
index 3c21137..7c4b521 100644
--- a/arch/arm64/boot/dts/nvidia/tegra210-p2371-2180.dts
+++ b/arch/arm64/boot/dts/nvidia/tegra210-p2371-2180.dts
@@ -166,4 +166,98 @@
};
};
};
+
+ tegra_sound {
+ status = "okay";
+
+ simple-audio-card,name = "jetson-tx1-ape";
+
+ simple-audio-card,widgets =
+ "Microphone", "MIC",
+ "Speaker", "SPK";
+
+ simple-audio-card,routing =
+ "SPK", "I2S1 Playback",
+ "SPK", "I2S2 Playback",
+ "SPK", "I2S3 Playback",
+ "SPK", "I2S4 Playback",
+ "SPK", "I2S5 Playback",
+ "I2S1 Capture", "MIC",
+ "I2S2 Capture", "MIC",
+ "I2S3 Capture", "MIC",
+ "I2S4 Capture", "MIC",
+ "I2S5 Capture", "MIC",
+ "DMIC1 Capture", "MIC",
+ "DMIC2 Capture", "MIC",
+ "DMIC3 Capture", "MIC";
+
+ /* BE links */
+ simple-audio-card,dai-link@1 {
+ format = "i2s";
+ bitclock-master = <&cpu_i2s1>;
+ frame-master = <&cpu_i2s1>;
+
+ cpu_i2s1: cpu@0 {
+ sound-dai = <&tegra_i2s1 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@2 {
+ format = "i2s";
+ bitclock-master = <&cpu_i2s2>;
+ frame-master = <&cpu_i2s2>;
+
+ cpu_i2s2: cpu@0 {
+ sound-dai = <&tegra_i2s2 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@3 {
+ format = "i2s";
+ bitclock-master = <&cpu_i2s3>;
+ frame-master = <&cpu_i2s3>;
+
+ cpu_i2s3: cpu@0 {
+ sound-dai = <&tegra_i2s3 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@4 {
+ format = "i2s";
+ bitclock-master = <&cpu_i2s4>;
+ frame-master = <&cpu_i2s4>;
+
+ cpu_i2s4: cpu@0 {
+ sound-dai = <&tegra_i2s4 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@5 {
+ format = "i2s";
+ bitclock-master = <&cpu_i2s5>;
+ frame-master = <&cpu_i2s5>;
+
+ cpu_i2s5: cpu@0 {
+ sound-dai = <&tegra_i2s5 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@6 {
+ cpu@0 {
+ sound-dai = <&tegra_dmic1 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@7 {
+ cpu@0 {
+ sound-dai = <&tegra_dmic2 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@8 {
+ cpu@0 {
+ sound-dai = <&tegra_dmic3 0>;
+ };
+ };
+ };
};
diff --git a/arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts b/arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts
index 721f66c..31994f6 100644
--- a/arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts
+++ b/arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts
@@ -842,4 +842,53 @@
};
};
};
+
+ tegra_sound {
+ status = "okay";
+
+ simple-audio-card,name = "jetson-nano-ape";
+ simple-audio-card,widgets =
+ "Microphone", "MIC",
+ "Speaker", "SPK";
+ simple-audio-card,routing =
+ "SPK", "I2S3 Playback",
+ "SPK", "I2S4 Playback",
+ "I2S3 Capture", "MIC",
+ "I2S4 Capture", "MIC",
+ "DMIC1 Capture", "MIC",
+ "DMIC2 Capture", "MIC";
+
+ /* BE links */
+ simple-audio-card,dai-link@1 {
+ format = "i2s";
+ bitclock-master = <&cpu_i2s1>;
+ frame-master = <&cpu_i2s1>;
+
+ cpu_i2s1: cpu@0 {
+ sound-dai = <&tegra_i2s3 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@2 {
+ format = "i2s";
+ bitclock-master = <&cpu_i2s2>;
+ frame-master = <&cpu_i2s2>;
+
+ cpu_i2s2: cpu@0 {
+ sound-dai = <&tegra_i2s4 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@3 {
+ cpu@0 {
+ sound-dai = <&tegra_dmic1 0>;
+ };
+ };
+
+ simple-audio-card,dai-link@4 {
+ cpu@0 {
+ sound-dai = <&tegra_dmic2 0>;
+ };
+ };
+ };
};
diff --git a/arch/arm64/boot/dts/nvidia/tegra210.dtsi b/arch/arm64/boot/dts/nvidia/tegra210.dtsi
index 73ae58f..f1925f1 100644
--- a/arch/arm64/boot/dts/nvidia/tegra210.dtsi
+++ b/arch/arm64/boot/dts/nvidia/tegra210.dtsi
@@ -1841,4 +1841,71 @@
};
};
};
+
+ tegra_sound {
+ status = "disabled";
+
+ compatible = "simple-cc-audio-card";
+
+ clocks = <&tegra_car TEGRA210_CLK_PLL_A>,
+ <&tegra_car TEGRA210_CLK_PLL_A_OUT0>,
+ <&tegra_car TEGRA210_CLK_EXTERN1>;
+ clock-names = "pll_a", "plla_out0", "aud_mclk";
+ assigned-clocks = <&tegra_car TEGRA210_CLK_PLL_A>,
+ <&tegra_car TEGRA210_CLK_PLL_A_OUT0>,
+ <&tegra_car TEGRA210_CLK_EXTERN1>;
+ assigned-clock-parents = <0>, <0>, <&tegra_car TEGRA210_CLK_PLL_A_OUT0>;
+ assigned-clock-rates = <368640000>, <49152000>, <12288000>;
+
+ simple-audio-card,aux-devs = <&tegra_ahub>;
+
+ /* FE links */
+ simple-audio-card,dai-link@0 {
+ cpu@0 {
+ sound-dai = <&tegra_admaif 0>;
+ };
+
+ cpu@1 {
+ sound-dai = <&tegra_admaif 1>;
+ };
+
+ cpu@2 {
+ sound-dai = <&tegra_admaif 2>;
+ };
+
+ cpu@3 {
+ sound-dai = <&tegra_admaif 3>;
+ };
+
+ cpu@4 {
+ sound-dai = <&tegra_admaif 4>;
+ };
+
+ cpu@5 {
+ sound-dai = <&tegra_admaif 5>;
+ };
+
+ cpu@6 {
+ sound-dai = <&tegra_admaif 6>;
+ };
+
+ cpu@7 {
+ sound-dai = <&tegra_admaif 7>;
+ };
+
+ cpu@8 {
+ sound-dai = <&tegra_admaif 8>;
+ };
+
+ cpu@9 {
+ sound-dai = <&tegra_admaif 9>;
+ };
+
+ /*
+ * Empty codec list.
+ * Router MUX controls take care of audio path by
+ * connecting multiple components.
+ */
+ };
+ };
};
--
2.7.4