[PATCH v4] arm64: dts: qcom: monaco-arduino-monza: Add QCNFA725B WiFi support
From: Qian Zhang
Date: Sun May 31 2026 - 03:14:51 EST
Add support for the QCNFA725B M.2 WiFi module (WCN6855-based) connected
to PCIe0 on the Arduino VENTUNO Q board. The following DT nodes are
required:
- qcom,wcn6855-pmu: manages GPIO56 (wlan_en) through the
pwrseq-qcom-wcn power sequencer, and exposes the WCN6855 internal
LDO regulators consumed by the wifi@0 node.
- rfkill-gpio: exposes GPIO54 to the rfkill subsystem for RF state
management.
- wifi@0: describes the WCN6855 endpoint on the PCI tree.
Signed-off-by: Qian Zhang <qian.zhang@xxxxxxxxxxxxxxxx>
---
.../boot/dts/qcom/monaco-arduino-monza.dts | 108 ++++++++++++++++++
1 file changed, 108 insertions(+)
The Arduino VENTUNO Q board uses a QCNFA725B M.2 PCIe WLAN module
connected to PCIe0. Two GPIOs are required for proper WLAN operation:
- GPIO56 (wlan_en): The WLAN module enable line
- GPIO54 (rfkill): The RF kill line
Testing:
- WLAN module (QCNFA725B) successfully enumerated on PCIe after boot
- WiFi scan detects available networks
- rfkill block/unblock correctly toggles GPIO54
Changes in v4:
- Replace regulator-fixed + vddpe-3v3-supply with qcom,wcn6855-pmu for
GPIO56 (wlan_en) power sequencing
- Fix module name QCNFA765 -> QCNFA725B
- Link to v3: https://lore.kernel.org/all/20260511-linux-next-v3-1-3e22737e71eb@xxxxxxxxxxxxxxxx/
Changes in v3:
- Replace regulator-fixed with rfkill-gpio for GPIO54 (rfkill)
- Reference wlan_en from PCIe node via vddpe-3v3-supply
- Fix subject prefix
- Link to v2 (wrongly named v1): https://lore.kernel.org/all/20260501051918.1990713-1-qian.zhang@xxxxxxxxxxxxxxxx/
Changes in v2:
- Clarified GPIO roles: GPIO54 for wlan_rf_kill, GPIO56 for wlan_en
- Improved commit message readability with bullet list format
- Link to v1 (wrongly named v0): https://lore.kernel.org/all/20260425031712.3800662-1-qian.zhang@xxxxxxxxxxxxxxxx/
diff --git a/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts b/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts
index ca14f0ea4dae..bd5b8a161e7f 100644
--- a/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts
+++ b/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts
@@ -153,6 +153,78 @@ vreg_nvme: regulator-3p3-m2 {
enable-active-high;
startup-delay-us = <20000>;
};
+
+ rfkill-wlan {
+ compatible = "rfkill-gpio";
+ label = "wlan";
+ radio-type = "wlan";
+ shutdown-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&wlrfkill_default_state>;
+ };
+
+ wcn6855-pmu {
+ compatible = "qcom,wcn6855-pmu";
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&wlan_en_state>;
+
+ wlan-enable-gpios = <&tlmm 56 GPIO_ACTIVE_HIGH>;
+
+ vddio-supply = <&vdc_3v3>;
+ vddaon-supply = <&vdc_3v3>;
+ vddpmu-supply = <&vdc_3v3>;
+ vddpmumx-supply = <&vdc_3v3>;
+ vddpmucx-supply = <&vdc_3v3>;
+ vddrfa0p95-supply = <&vdc_3v3>;
+ vddrfa1p3-supply = <&vdc_3v3>;
+ vddrfa1p9-supply = <&vdc_3v3>;
+ vddpcie1p3-supply = <&vdc_3v3>;
+ vddpcie1p9-supply = <&vdc_3v3>;
+
+ regulators {
+ vreg_pmu_rfa_cmn: ldo0 {
+ regulator-name = "vreg_pmu_rfa_cmn";
+ };
+
+ vreg_pmu_aon_0p59: ldo1 {
+ regulator-name = "vreg_pmu_aon_0p59";
+ };
+
+ vreg_pmu_wlcx_0p8: ldo2 {
+ regulator-name = "vreg_pmu_wlcx_0p8";
+ };
+
+ vreg_pmu_wlmx_0p85: ldo3 {
+ regulator-name = "vreg_pmu_wlmx_0p85";
+ };
+
+ vreg_pmu_btcmx_0p85: ldo4 {
+ regulator-name = "vreg_pmu_btcmx_0p85";
+ };
+
+ vreg_pmu_rfa_0p8: ldo5 {
+ regulator-name = "vreg_pmu_rfa_0p8";
+ };
+
+ vreg_pmu_rfa_1p2: ldo6 {
+ regulator-name = "vreg_pmu_rfa_1p2";
+ };
+
+ vreg_pmu_rfa_1p8: ldo7 {
+ regulator-name = "vreg_pmu_rfa_1p8";
+ };
+
+ vreg_pmu_pcie_0p9: ldo8 {
+ regulator-name = "vreg_pmu_pcie_0p9";
+ };
+
+ vreg_pmu_pcie_1p8: ldo9 {
+ regulator-name = "vreg_pmu_pcie_1p8";
+ };
+ };
+ };
};
ðernet0 {
@@ -347,6 +419,29 @@ pci@0,0 {
ranges;
reg = <0x010000 0x00 0x00 0x00 0x00>;
+ pci@1,0 {
+ #address-cells = <3>;
+ #size-cells = <2>;
+ device_type = "pci";
+ ranges;
+ reg = <0x20800 0x00 0x00 0x00 0x00>;
+
+ wifi@0 {
+ compatible = "pci17cb,1103";
+ reg = <0 0 0 0 0>;
+
+ vddrfacmn-supply = <&vreg_pmu_rfa_cmn>;
+ vddaon-supply = <&vreg_pmu_aon_0p59>;
+ vddwlcx-supply = <&vreg_pmu_wlcx_0p8>;
+ vddwlmx-supply = <&vreg_pmu_wlmx_0p85>;
+ vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>;
+ vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>;
+ vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>;
+ vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>;
+ vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>;
+ };
+ };
+
pci@2,0 {
#address-cells = <3>;
#size-cells = <2>;
@@ -448,6 +543,19 @@ adv7535_default: adv7535-default-state {
function = "gpio";
bias-pull-up;
};
+
+ wlrfkill_default_state: wlrfkill-default-state {
+ pins = "gpio54";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ wlan_en_state: wlan-en-state {
+ pins = "gpio56";
+ function = "gpio";
+ output-low;
+ };
};
&uart7 {
--
2.34.1