From: Hongyang Zhao <hongyang.zhao@thundersoft.com>
To: mohammad.rafi.shaik@oss.qualcomm.com
Cc: andersson@kernel.org, broonie@kernel.org, conor+dt@kernel.org,
devicetree@vger.kernel.org, dmitry.baryshkov@oss.qualcomm.com,
drake@endlessm.com, hongyang.zhao@thundersoft.com,
katsuhiro@katsuster.net, konradybcio@kernel.org,
krzk+dt@kernel.org, lgirdwood@gmail.com,
linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-sound@vger.kernel.org, matteomartelli3@gmail.com,
neil.armstrong@linaro.org, perex@perex.cz, robh@kernel.org,
rosh@debian.org, srini@kernel.org, tiwai@suse.com,
zhoubinbin@loongson.cn
Subject: Re: [PATCH v2 6/6] arm64: dts: qcom: qcs6490-rubikpi3: Add audio support
Date: Thu, 16 Jul 2026 17:52:17 +0800 [thread overview]
Message-ID: <20260716095217.2855206-1-hongyang.zhao@thundersoft.com> (raw)
In-Reply-To: <7c905a1c-f65e-4ef5-a65c-2be83ff820ba@oss.qualcomm.com>
Hi Rafi,
Thank you for the review.
On 7/15/2026 7:32 PM, Hongyang Zhao wrote:
> > RubikPi 3 uses the AudioReach firmware path for its external audio
> > interfaces. The primary MI2S interface connects to an ES8316 codec for
> > headset playback and capture, while the quaternary MI2S interface feeds
> > the LT9611 HDMI bridge.
> >
> > Enable the AudioReach description and add the three DAI links. Describe
> > the primary MI2S MCLK and bit clock inputs under the backend DAI so the
> > machine driver can control them. Add the primary and quaternary pin
> > configurations to the sound card and make the LT9611 codec DAI
> > addressable.
> >
> > Describe the ES8316, its 3.3 V enable supply, 19.2 MHz MCLK and inverted
> > GPIO jack-detect signal. Route the codec headphone outputs and microphone
> > input to the board headset connector.
> >
> > Signed-off-by: Hongyang Zhao <hongyang.zhao@thundersoft.com>
> > ---
> > .../boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts | 159 +++++++++++++++++++++
> > 1 file changed, 159 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts
> > index d8a9a7e47bdc..7b010823d692 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: regulator-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";
> >
> > @@ -727,6 +745,26 @@ &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_LEVEL_HIGH>;
> > +
> > + pinctrl-0 = <&es8316_jack_detect>;
> > + pinctrl-names = "default";
> > +
> > + everest,jack-detect-inverted;
> > + };
> > +};
> > +
> > /* Pin 3, 5 in 40-pin connector */
> > &i2c1 {
> > status = "okay";
> > @@ -740,6 +778,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>;
> > @@ -978,6 +1017,27 @@ &pon_resin {
> > status = "okay";
> > };
> >
> > +&q6apmbedai {
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > +
> > + dai@10 {
> > + reg = <PRIMARY_MI2S_RX>;
> > + clocks = <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
>
> Drop this; it is already enabled from the codec node.
>
> Why is the same clock being enabled in two places?
Agreed. I removed MCLK from both Primary MI2S backend nodes. They now
describe only BCLK, for example:
dai@10 {
reg = <PRIMARY_MI2S_RX>;
clocks = <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
clock-names = "bclk";
};
The ES8316 codec node is the sole MCLK consumer. The corresponding
machine data also no longer enables CPU-side MCLK.
>
> > + <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
> > + clock-names = "mclk",
> > + "bclk";
> > + };
> > +
> > + dai@11 {
> > + reg = <PRIMARY_MI2S_TX>;
> > + clocks = <&q6prmcc LPASS_CLK_ID_MCLK_1 LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
> > + <&q6prmcc LPASS_CLK_ID_PRI_MI2S_IBIT LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
> > + clock-names = "mclk",
> > + "bclk";
> > + };
> > +};
> > +
> > &qupv3_id_0 {
> > firmware-name = "qcom/qcm6490/qupv3fw.elf";
> >
> > @@ -1014,6 +1074,69 @@ &sdhc_2 {
> > status = "okay";
> > };
> >
> > +&sound {
> > + compatible = "thundercomm,qcs6490-rubikpi3-sndcard";
> > + model = "QCS6490-Thundercomm-RubikPi3";
> > +
> > + pinctrl-0 = <&mi2s0_data0>, <&mi2s0_data1>, <&mi2s0_mclk>,
> > + <&mi2s0_sclk>, <&mi2s0_ws>,
> > + <&lpass_qua_mi2s_sclk>, <&lpass_qua_mi2s_ws>,
> > + <&lpass_qua_mi2s_data>;
> > + pinctrl-names = "default";
> > +
> > + audio-routing = "Headphone Jack", "HPOL",
> > + "Headphone Jack", "HPOR",
> > + "MIC2", "Mic Jack";
> > +
> > + mi2s-playback-dai-link {
> > + link-name = "MI2S-LPAIF-RX-PRIMARY";
> > +
>
> What does "MI2S-LPAIF-RX-PRIMARY" represents?
The original name was intended to describe the primary MI2S receive
path through LPAIF, but I agree that it was not clear.
Following the naming used by other Qualcomm sound card device trees, I
have changed the DAI link names to:
- "Primary MI2S Playback"
- "Primary MI2S Capture"
- "HDMI Playback"
>
> > + 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>;
> > + };
> > + };
> > +};
> > +
> > /* Pin 19, 21, 23, 24 in 40-pin connector */
> > &spi12 {
> > status = "okay";
> > @@ -1228,6 +1351,29 @@ &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;
> > + };
> > +
> > + lpass_qua_mi2s_ws: qua-mi2s-ws-state {
> > + pins = "gpio1";
> > + function = "qua_mi2s_ws";
> > + drive-strength = <8>;
> > + bias-disable;
> > + };
> > +
> > + lpass_qua_mi2s_data: qua-mi2s-data-state {
> > + pins = "gpio2", "gpio3", "gpio4";
> > + function = "qua_mi2s_data";
> > + drive-strength = <8>;
> > + bias-disable;
> > + };
> > +};
> > +
> > &tlmm {
> > pcie1_reset_n: pcie1-reset-n-state {
> > pins = "gpio2";
> > @@ -1366,6 +1512,12 @@ m2_vcc_pin: m2-vcc-state {
> > input-disable;
> > };
> >
> > + es8316_jack_detect: es8316-jack-detect-state {
> > + pins = "gpio63";
> > + function = "gpio";
> > + bias-disable;
> > + };
> > +
> > lt9611_vcc_pin: lt9611-vcc-pin-state {
> > pins = "gpio83";
> > function = "gpio";
> > @@ -1395,6 +1547,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";
> >
Best regards,
Hongyang
next prev parent reply other threads:[~2026-07-16 9:57 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-15 14:02 [PATCH v2 0/6] Add audio support for QCS6490 RubikPi3 Hongyang Zhao
2026-07-15 14:02 ` [PATCH v2 1/6] ASoC: dt-bindings: es8316: Document jack detect inversion Hongyang Zhao
2026-07-15 14:02 ` [PATCH v2 2/6] ASoC: dt-bindings: qcom,sm8250: Add RubikPi 3 sound card Hongyang Zhao
2026-07-15 14:02 ` [PATCH v2 3/6] ASoC: qcom: common: Add generic headset jack helpers Hongyang Zhao
2026-07-15 14:02 ` [PATCH v2 4/6] ASoC: qcom: sc8280xp: Add per-DAI board configuration Hongyang Zhao
2026-07-15 14:02 ` [PATCH v2 5/6] ASoC: qcom: sc8280xp: Add RubikPi 3 sound card support Hongyang Zhao
2026-07-15 18:08 ` Mohammad Rafi Shaik
2026-07-16 9:15 ` Hongyang Zhao
2026-07-15 14:02 ` [PATCH v2 6/6] arm64: dts: qcom: qcs6490-rubikpi3: Add audio support Hongyang Zhao
2026-07-15 18:17 ` Mohammad Rafi Shaik
2026-07-16 9:52 ` Hongyang Zhao [this message]
2026-07-16 8:11 ` [PATCH v2 0/6] Add audio support for QCS6490 RubikPi3 Krzysztof Kozlowski
2026-07-16 8:46 ` Hongyang Zhao
-- strict thread matches above, loose matches on Subject: below --
2026-03-17 8:35 [PATCH v2 0/6] Subject: [PATCH 0/6] Add audio support for QCS6490 Thundercomm RubikPi3 Hongyang Zhao
2026-03-17 8:35 ` [PATCH v2 6/6] arm64: dts: qcom: qcs6490-rubikpi3: Add audio support Hongyang Zhao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260716095217.2855206-1-hongyang.zhao@thundersoft.com \
--to=hongyang.zhao@thundersoft.com \
--cc=andersson@kernel.org \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=drake@endlessm.com \
--cc=katsuhiro@katsuster.net \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=matteomartelli3@gmail.com \
--cc=mohammad.rafi.shaik@oss.qualcomm.com \
--cc=neil.armstrong@linaro.org \
--cc=perex@perex.cz \
--cc=robh@kernel.org \
--cc=rosh@debian.org \
--cc=srini@kernel.org \
--cc=tiwai@suse.com \
--cc=zhoubinbin@loongson.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox