[PATCH 2/3] arm64: dts: qcom: nord-rrd: Add sound support

From: Shawn Guo

Date: Sun Sep 13 2026 - 22:42:16 EST


From: Mohammad Rafi Shaik <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>

Enable audio on the nord RRD board. Add a soundcard node using the
qcom,nord-ride-sndcard compatible with two DAI links:

- PCM1681 playback over Tertiary MI2S RX
- ADAU1979 capture over Tertiary MI2S TX

Add MI2S pin mux states (data, SCLK, WS on GPIO 73-76) and the MCLK0
pin state (GPIO 99) to nord-embedded.dtsi so they can be shared with
other nord board variants.

Add PCM1681/ADAU1979 codec nodes on I2C18, with the PCM1681 system
clock supplied via MCLK0. The DAC control lines come off a TCA6408 I/O
expander on the same bus, so add that too and hog its dac_enable and
click-pop-mute-n outputs, both of which have to be asserted before the
DAC produces sound.

Assisted-by: LLM
Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@xxxxxxxxxxxxxxxx>
Signed-off-by: Shawn Guo <shengchao.guo@xxxxxxxxxxxxxxxx>
---
arch/arm64/boot/dts/qcom/nord-embedded.dtsi | 30 ++++++
arch/arm64/boot/dts/qcom/nord-rrd.dts | 112 ++++++++++++++++++++
2 files changed, 142 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/nord-embedded.dtsi b/arch/arm64/boot/dts/qcom/nord-embedded.dtsi
index 84ce57a07361..1cd6e0e17345 100644
--- a/arch/arm64/boot/dts/qcom/nord-embedded.dtsi
+++ b/arch/arm64/boot/dts/qcom/nord-embedded.dtsi
@@ -1155,6 +1155,36 @@ nsp_data_noc_3: interconnect@1fe00000 {
};

&tlmm {
+ aud_intfc8_mi2s_active: aud-intfc8-mi2s-active-state {
+ data-pins {
+ pins = "gpio75", "gpio76";
+ function = "aud_intfc8_data";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ sclk-pins {
+ pins = "gpio73";
+ function = "aud_intfc8_clk";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ ws-pins {
+ pins = "gpio74";
+ function = "aud_intfc8_ws";
+ drive-strength = <8>;
+ bias-disable;
+ };
+ };
+
+ aud_mclk0_mira_active: aud-mclk0-mira-active-state {
+ pins = "gpio99";
+ function = "aud_mclk0_mira";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
qup_i2c0_default: qup-i2c0-default-state {
pins = "gpio111", "gpio112";
function = "qup0_se0";
diff --git a/arch/arm64/boot/dts/qcom/nord-rrd.dts b/arch/arm64/boot/dts/qcom/nord-rrd.dts
index c2f870ac4234..8798f69d3967 100644
--- a/arch/arm64/boot/dts/qcom/nord-rrd.dts
+++ b/arch/arm64/boot/dts/qcom/nord-rrd.dts
@@ -8,6 +8,7 @@
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
+#include <dt-bindings/sound/qcom,q6afe.h>

#include "nord-embedded.dtsi"
#include "pmau0102-nord.dtsi"
@@ -70,6 +71,46 @@ vreg_hub_1p2: regulator-hub-1p2 {
regulator-max-microvolt = <1200000>;
regulator-always-on;
};
+
+ sound {
+ compatible = "qcom,nord-ride-sndcard";
+ model = "NORD-RRD";
+
+ pinctrl-0 = <&aud_intfc8_mi2s_active>, <&aud_mclk0_mira_active>;
+ pinctrl-names = "default";
+
+ aud-intfc8-mi2s-playback-dai-link {
+ link-name = "PCM1681 Playback";
+
+ codec {
+ sound-dai = <&pcm1681>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai TERTIARY_MI2S_RX>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ aud-intfc8-mi2s-capture-dai-link {
+ link-name = "ADAU1979 Capture";
+
+ codec {
+ sound-dai = <&adau1979>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai TERTIARY_MI2S_TX>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+ };
};

&apps_rsc {
@@ -464,6 +505,60 @@ usb_0_con_ss: endpoint {
};
};

+&i2c18 {
+ clock-frequency = <400000>;
+
+ status = "okay";
+
+ expander0: gpio@20 {
+ compatible = "ti,tca6408";
+ reg = <0x20>;
+ #gpio-cells = <2>;
+ gpio-controller;
+ #interrupt-cells = <2>;
+ interrupt-controller;
+ interrupts-extended = <&pmau0102_l_gpios 6 IRQ_TYPE_LEVEL_LOW>;
+ reset-gpios = <&pmau0102_l_gpios 5 GPIO_ACTIVE_LOW>;
+
+ click-pop-mute-hog {
+ gpio-hog;
+ gpios = <5 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "click-pop-mute-n";
+ };
+
+ dac-enable-hog {
+ gpio-hog;
+ gpios = <6 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "dac_enable";
+ };
+ };
+
+ /* ADI ADAU1979 - 4-channel 24-bit ADC */
+ adau1979: adau1979@31 {
+ compatible = "adi,adau1979";
+ reg = <0x31>;
+
+ AVDD-supply = <&vreg_per_3p3>;
+ DVDD-supply = <&vreg_per_3p3>;
+ #sound-dai-cells = <0>;
+ };
+
+ /* PCM1681 DAC */
+ pcm1681: pcm1681@4c {
+ compatible = "ti,pcm1681";
+ reg = <0x4c>;
+
+ 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>;
+
+ #sound-dai-cells = <0>;
+ };
+};
+
&pmau0102_i_gpios {
usb_pd_int_default: usb-pd-int-state {
pins = "gpio8";
@@ -474,6 +569,23 @@ usb_pd_int_default: usb-pd-int-state {
};
};

+&q6apmbedai {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ dai@20 {
+ reg = <TERTIARY_MI2S_RX>;
+ clocks = <&q6prmcc LPASS_CLK_ID_QAIF_IF8_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ clock-names = "bclk";
+ };
+
+ dai@21 {
+ reg = <TERTIARY_MI2S_TX>;
+ 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