[PATCH 5/5] arm64: dts: qcom: qcs6490-rubikpi3: Add audio support
From: Hongyang Zhao
Date: Sat Jun 06 2026 - 15:07:39 EST
Add audio support for the Thundercomm RubikPi3 board.
Enable AudioReach and describe the ES8316 headset codec, the LT9611
HDMI codec endpoint and the SPDIF TX/RX endpoints exposed on the
40-pin header. Add the sound card DAI links, LPASS pin configuration
and ES8316 fixed 3.3V supply.
Signed-off-by: Hongyang Zhao <hongyang.zhao@xxxxxxxxxxxxxxx>
---
.../boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts | 196 +++++++++++++++++++++
1 file changed, 196 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts
index f47efca42d48..3249176b4c77 100644
--- a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts
+++ b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts
@@ -19,6 +19,7 @@
#include "pm7325.dtsi"
#include "pm8350c.dtsi" /* PM7350C */
#include "pmk8350.dtsi" /* PMK7325 */
+#include "qcs6490-audioreach.dtsi"
/delete-node/ &adsp_mem;
/delete-node/ &cdsp_mem;
@@ -128,6 +129,23 @@ fan0: pwm-fan {
pinctrl-names = "default";
};
+ vreg_es8316_3v3: vreg-es8316-3v3 {
+ compatible = "regulator-fixed";
+
+ regulator-name = "vreg_es8316_3v3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+
+ gpio = <&tlmm 117 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ pinctrl-0 = <&es8316_power_on>;
+ pinctrl-names = "default";
+
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
vreg_eth_1v8: regulator-eth-1v8 {
compatible = "regulator-fixed";
@@ -346,6 +364,16 @@ active-config0 {
};
};
+ spdif_rx: spdif-rx {
+ compatible = "linux,spdif-dir";
+ #sound-dai-cells = <0>;
+ };
+
+ spdif_tx: spdif-tx {
+ compatible = "linux,spdif-dit";
+ #sound-dai-cells = <0>;
+ };
+
usb1-sbu-mux {
compatible = "pericom,pi3usb102", "gpio-sbu-mux";
@@ -727,6 +755,23 @@ &gpu_zap_shader {
firmware-name = "qcom/qcs6490/a660_zap.mbn";
};
+&i2c0 {
+ status = "okay";
+
+ es8316: audio-codec@11 {
+ compatible = "everest,es8316";
+ reg = <0x11>;
+ #sound-dai-cells = <0>;
+
+ clocks = <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+ clock-names = "mclk";
+
+ interrupts-extended = <&tlmm 63 IRQ_TYPE_EDGE_BOTH>;
+
+ everest,jack-detect-inverted;
+ };
+};
+
/* Pin 3, 5 in 40-pin connector */
&i2c1 {
status = "okay";
@@ -740,6 +785,7 @@ &i2c9 {
lt9611_codec: hdmi-bridge@39 {
compatible = "lontium,lt9611";
reg = <0x39>;
+ #sound-dai-cells = <1>;
interrupts-extended = <&tlmm 20 IRQ_TYPE_EDGE_FALLING>;
reset-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>;
@@ -970,6 +1016,15 @@ &pon_resin {
status = "okay";
};
+&q6apmbedai {
+ pinctrl-0 = <&mi2s0_data0>, <&mi2s0_data1>, <&mi2s0_mclk>,
+ <&mi2s0_sclk>, <&mi2s0_ws>,
+ <&lpass_qua_mi2s_sclk>, <&lpass_qua_mi2s_ws>, <&lpass_qua_mi2s_data>,
+ <&lpass_lpi_i2s1_clk>, <&lpass_lpi_i2s1_ws>,
+ <&lpass_lpi_i2s1_data0>, <&lpass_lpi_i2s1_data1>;
+ pinctrl-names = "default";
+};
+
&qupv3_id_0 {
firmware-name = "qcom/qcm6490/qupv3fw.elf";
@@ -1006,6 +1061,96 @@ &sdhc_2 {
status = "okay";
};
+&sound {
+ compatible = "thundercomm,qcs6490-rubikpi3-sndcard";
+ model = "QCS6490-Thundercomm-RubikPi3";
+
+ audio-routing =
+ "Headphone Jack", "HPOL",
+ "Headphone Jack", "HPOR",
+ "MIC2", "Mic Jack";
+
+ mi2s-playback-dai-link {
+ link-name = "MI2S-LPAIF-RX-PRIMARY";
+
+ codec {
+ sound-dai = <&es8316>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai PRIMARY_MI2S_RX>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ mi2s-capture-dai-link {
+ link-name = "MI2S-LPAIF-TX-PRIMARY";
+
+ codec {
+ sound-dai = <&es8316>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai PRIMARY_MI2S_TX>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ quaternary-mi2s-playback-dai-link {
+ link-name = "MI2S-LPAIF_RXTX-RX-PRIMARY";
+
+ codec {
+ sound-dai = <<9611_codec 0>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai QUATERNARY_MI2S_RX>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ tert-mi2s-playback-dai-link {
+ link-name = "MI2S-LPAIF-RX-TERTIARY";
+
+ codec {
+ sound-dai = <&spdif_tx>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai TERTIARY_MI2S_RX>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+
+ tert-mi2s-capture-dai-link {
+ link-name = "MI2S-LPAIF-TX-TERTIARY";
+
+ codec {
+ sound-dai = <&spdif_rx>;
+ };
+
+ cpu {
+ sound-dai = <&q6apmbedai TERTIARY_MI2S_TX>;
+ };
+
+ platform {
+ sound-dai = <&q6apm>;
+ };
+ };
+};
+
/* Pin 19, 21, 23, 24 in 40-pin connector */
&spi12 {
status = "okay";
@@ -1220,6 +1365,50 @@ &sdc2_data {
drive-strength = <10>;
};
+&lpass_tlmm {
+ lpass_qua_mi2s_sclk: qua-mi2s-sclk-state {
+ pins = "gpio0";
+ function = "qua_mi2s_sclk";
+ drive-strength = <8>;
+ bias-disable;
+ output-high;
+ };
+
+ lpass_qua_mi2s_ws: qua-mi2s-ws-state {
+ pins = "gpio1";
+ function = "qua_mi2s_ws";
+ drive-strength = <8>;
+ output-high;
+ };
+
+ lpass_qua_mi2s_data: qua-mi2s-data-state {
+ pins = "gpio2", "gpio3", "gpio4";
+ function = "qua_mi2s_data";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ lpass_lpi_i2s1_clk: lpi-i2s1-clk-state {
+ pins = "gpio6";
+ function = "i2s1_clk";
+ };
+
+ lpass_lpi_i2s1_ws: lpi-i2s1-ws-state {
+ pins = "gpio7";
+ function = "i2s1_ws";
+ };
+
+ lpass_lpi_i2s1_data0: lpi-i2s1-data0-state {
+ pins = "gpio8";
+ function = "i2s1_data";
+ };
+
+ lpass_lpi_i2s1_data1: lpi-i2s1-data1-state {
+ pins = "gpio9";
+ function = "i2s1_data";
+ };
+};
+
&tlmm {
pcie1_reset_n: pcie1-reset-n-state {
pins = "gpio2";
@@ -1387,6 +1576,13 @@ pcie0_wake_n: pcie0-wake-n-state {
bias-pull-up;
};
+ es8316_power_on: es8316-power-on-state {
+ pins = "gpio117";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+
wifi_power_on: wifi-power-on-state {
pins = "gpio125";
function = "gpio";
--
2.43.0