[PATCH RFC v2 5/5] arm64: dts: qcom: nord-rrd: Add sound support

From: Shawn Guo

Date: Wed Oct 21 2026 - 03:39:34 EST


Enable audio on the nord-rrd board. Add a soundcard node using
the qcom,nord-sndcard compatible.

Add PCM1681/ADAU1979 codec nodes on I2C18, with the PCM1681 system
clock supplied via MCLK0.

Describe DAC_ENABLE as the enable of two regulator-fixed supplies
(3.3V and 5V load switches) feeding the PCM1681, and the two MAX9892
click-and-pop suppressors as one simple-audio-amplifier on
CLICK_POP_MUTE_N, routed after VOUT1..4, so DAPM controls the mute.

Signed-off-by: Shawn Guo <shengchao.guo@xxxxxxxxxxxxxxxx>
---
arch/arm64/boot/dts/qcom/nord-rrd.dts | 153 ++++++++++++++++++++++++++
1 file changed, 153 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/nord-rrd.dts b/arch/arm64/boot/dts/qcom/nord-rrd.dts
index 47978df0af92..b0abee05a8ba 100644
--- a/arch/arm64/boot/dts/qcom/nord-rrd.dts
+++ b/arch/arm64/boot/dts/qcom/nord-rrd.dts
@@ -7,6 +7,7 @@

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
+#include <dt-bindings/sound/qcom,q6afe.h>

#include "nord-embedded.dtsi"
#include "pmau0102-nord.dtsi"
@@ -53,6 +54,106 @@ bi_tcxo_ao_div2: bi-tcxo-ao-div2-clk {
clock-div = <2>;
};
};
+
+ /*
+ * MAX9892 click-and-pop suppressors on the PCM1681 line outputs. Both
+ * parts are muted by a single CLICK_POP_MUTE_N line, so describe them
+ * as one amplifier.
+ */
+ lineout_amp: amplifier {
+ compatible = "simple-audio-amplifier";
+ sound-name-prefix = "LineOut";
+ enable-gpios = <&tlmm 42 GPIO_ACTIVE_HIGH>;
+ VCC-supply = <&vreg_per_3p3>;
+ };
+
+ sound {
+ compatible = "qcom,nord-sndcard";
+ model = "NORD-RRD";
+
+ aux-devs = <&lineout_amp>;
+ audio-routing = "LineOut INL", "VOUT1",
+ "LineOut INR", "VOUT2",
+ "LineOut INL", "VOUT3",
+ "LineOut INR", "VOUT4";
+
+ pinctrl-0 = <&aud_intfc8_mi2s_active>;
+ pinctrl-names = "default";
+
+ aud-intfc8-tdm-playback-dai-link {
+ link-name = "PCM1681 Playback";
+
+ codec {
+ dai-tdm-slot-num = <8>;
+ dai-tdm-slot-width = <32>;
+ dai-tdm-slot-rx-mask = <1 1 1 1>;
+ sound-dai = <&pcm1681>;
+ };
+
+ cpu {
+ dai-tdm-slot-num = <8>;
+ dai-tdm-slot-width = <32>;
+ dai-tdm-slot-tx-mask = <1 1 1 1>;
+ sound-dai = <&q6apmbedai AIF_TDM_RX_8>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ aud-intfc8-tdm-capture-dai-link {
+ link-name = "ADAU1979 Capture";
+
+ codec {
+ dai-tdm-slot-num = <8>;
+ dai-tdm-slot-width = <32>;
+ dai-tdm-slot-rx-mask = <1 1 1 1>;
+ sound-dai = <&adau1979>;
+ };
+
+ cpu {
+ dai-tdm-slot-num = <8>;
+ dai-tdm-slot-width = <32>;
+ dai-tdm-slot-rx-mask = <1 1 1 1>;
+ sound-dai = <&q6apmbedai AIF_TDM_TX_8>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+ };
+
+ /*
+ * DAC_ENABLE gates two load switches feeding the PCM1681, one for the
+ * analog and one for the digital supply.
+ */
+ vreg_3p3_dac: regulator-3p3-dac {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_3p3_dac";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&tlmm 41 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ vreg_5p0_dac: regulator-5p0-dac {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_5p0_dac";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ gpio = <&tlmm 41 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ vreg_per_3p3: regulator-per-3p3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_per_3p3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-always-on;
+ };
};

&apps_rsc {
@@ -377,6 +478,58 @@ rtc@32 {
};
};

+&i2c18 {
+ clock-frequency = <400000>;
+
+ status = "okay";
+
+ /* ADI ADAU1979 - 4-channel 24-bit ADC */
+ adau1979: adau1979@31 {
+ compatible = "adi,adau1979";
+ reg = <0x31>;
+
+ AVDD-supply = <&vreg_per_3p3>;
+ #sound-dai-cells = <0>;
+ };
+
+ /* PCM1681 DAC */
+ pcm1681: pcm1681@4c {
+ compatible = "ti,pcm1681";
+ reg = <0x4c>;
+
+ pinctrl-0 = <&aud_mclk0_mira_active>;
+ pinctrl-names = "default";
+
+ clocks = <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ clock-names = "sck";
+ assigned-clocks = <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ assigned-clock-rates = <12288000>;
+
+ VCC1-supply = <&vreg_5p0_dac>;
+ VCC2-supply = <&vreg_5p0_dac>;
+ VDD-supply = <&vreg_3p3_dac>;
+
+ #sound-dai-cells = <0>;
+ };
+};
+
+&q6apmbedai {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ dai@195 {
+ reg = <AIF_TDM_RX_8>;
+ clocks = <&q6prmcc LPASS_CLK_ID_QAIF_IF8_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ clock-names = "bclk";
+ };
+
+ dai@196 {
+ reg = <AIF_TDM_TX_8>;
+ clocks = <&q6prmcc LPASS_CLK_ID_QAIF_IF8_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ clock-names = "bclk";
+ };
+};
+
&qupv3_0 {
firmware-name = "qcom/nord/qupv3fw.elf";

--
2.43.0