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