Devicetree
 help / color / mirror / Atom feed
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

  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