[PATCH v2 3/3] arm64: dts: qcom: hamoa-iot-evk: Describe the PCIe M.2 Key E connector
From: Wei Deng
Date: Thu Jul 23 2026 - 06:04:30 EST
The Hamoa IoT EVK has a PCIe M.2 Mechanical Key E connector for wireless
connectivity cards exposing Wi-Fi over PCIe and Bluetooth over either
UART or USB, depending on the card variant.
Describe the connector node with:
- port@0: PCIe for Wi-Fi, linked to pcie4_port0
- port@2: USB for Bluetooth (USB variants), linked to usb_2 port@1
- port@3: UART for Bluetooth (UART variants), linked to uart14
This allows the pwrseq-pcie-m2 driver to manage card power and
dynamically create the UART serdev for UART BT variants, while USB
BT variants are enumerated via the USB hub pwrseq path.
Remove the chip-specific wcn7850-pmu node, the static bluetooth
serdev under uart14, and the wifi@0 PCI child node, as the M.2
connector approach replaces WCN7850-specific power sequencing with
a chip-agnostic model.
Also remove the now-unused vreg_wcn_0p95 and vreg_wcn_1p9 dummy
fixed regulators whose only consumers were the wcn7850-pmu node.
Signed-off-by: Wei Deng <wei.deng@xxxxxxxxxxxxxxxx>
---
arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 183 ++++++++++++-----------------
1 file changed, 75 insertions(+), 108 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
index 9fa86bb6438e..cc0c03b97f4f 100644
--- a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
+++ b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
@@ -479,32 +479,6 @@ vph_pwr: regulator-vph-pwr {
regulator-boot-on;
};
- /*
- * TODO: These two regulators are actually part of the removable M.2
- * card and not the EVK mainboard. Need to describe this differently.
- * Functionally it works correctly, because all we need to do is to
- * turn on the actual 3.3V supply above.
- */
- vreg_wcn_0p95: regulator-wcn-0p95 {
- compatible = "regulator-fixed";
-
- regulator-name = "VREG_WCN_0P95";
- regulator-min-microvolt = <950000>;
- regulator-max-microvolt = <950000>;
-
- vin-supply = <&vreg_wcn_3p3>;
- };
-
- vreg_wcn_1p9: regulator-wcn-1p9 {
- compatible = "regulator-fixed";
-
- regulator-name = "VREG_WCN_1P9";
- regulator-min-microvolt = <1900000>;
- regulator-max-microvolt = <1900000>;
-
- vin-supply = <&vreg_wcn_3p3>;
- };
-
vreg_wcn_3p3: regulator-wcn-3p3 {
compatible = "regulator-fixed";
@@ -538,6 +512,58 @@ vreg_wwan: regulator-wwan {
regulator-boot-on;
};
+ wifi-bt-connector {
+ compatible = "pcie-m2-e-connector";
+ vpcie3v3-supply = <&vreg_wcn_3p3>;
+
+ w-disable1-gpios = <&tlmm 117 GPIO_ACTIVE_LOW>;
+ w-disable2-gpios = <&tlmm 116 GPIO_ACTIVE_LOW>;
+
+ pinctrl-0 = <&wcn_wlan_en>, <&wcn_bt_en>;
+ pinctrl-names = "default";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ /* PCIe for Wi-Fi */
+ port@0 {
+ reg = <0>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ m2_e_pcie_ep: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&pcie4_port0_ep>;
+ };
+ };
+
+ /* USB for Bluetooth */
+ port@2 {
+ reg = <2>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ m2_e_usb_ep: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&usb_2_m2_ep>;
+ };
+ };
+
+ /* UART for Bluetooth */
+ port@3 {
+ reg = <3>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ m2_e_uart_ep: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&uart14_ep>;
+ };
+ };
+ };
+ };
+
sound {
compatible = "qcom,x1e80100-sndcard";
model = "X1E80100-EVK";
@@ -677,64 +703,6 @@ usb_1_ss0_sbu_mux: endpoint {
};
};
- wcn7850-pmu {
- compatible = "qcom,wcn7850-pmu";
-
- vdd-supply = <&vreg_wcn_0p95>;
- vddio-supply = <&vreg_l15b_1p8>;
- vddaon-supply = <&vreg_wcn_0p95>;
- vdddig-supply = <&vreg_wcn_0p95>;
- vddrfa1p2-supply = <&vreg_wcn_1p9>;
- vddrfa1p8-supply = <&vreg_wcn_1p9>;
-
- bt-enable-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>;
- wlan-enable-gpios = <&tlmm 117 GPIO_ACTIVE_HIGH>;
-
- pinctrl-0 = <&wcn_bt_en>, <&wcn_wlan_en>;
- pinctrl-names = "default";
-
- 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";
- };
- };
- };
};
&i2c1 {
@@ -1025,19 +993,10 @@ &pcie4_port0 {
reset-gpios = <&tlmm 146 GPIO_ACTIVE_LOW>;
wake-gpios = <&tlmm 148 GPIO_ACTIVE_LOW>;
- wifi@0 {
- compatible = "pci17cb,1107";
- reg = <0x10000 0x0 0x0 0x0 0x0>;
-
- vddaon-supply = <&vreg_pmu_aon_0p59>;
- vddwlcx-supply = <&vreg_pmu_wlcx_0p8>;
- vddwlmx-supply = <&vreg_pmu_wlmx_0p85>;
- vddrfacmn-supply = <&vreg_pmu_rfa_cmn>;
- 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>;
+ port {
+ pcie4_port0_ep: endpoint {
+ remote-endpoint = <&m2_e_pcie_ep>;
+ };
};
};
@@ -1531,17 +1490,10 @@ wcn_usb_sw_n: wcn-usb-sw-n-state {
&uart14 {
status = "okay";
- bluetooth {
- compatible = "qcom,wcn7850-bt";
- max-speed = <3200000>;
-
- vddaon-supply = <&vreg_pmu_aon_0p59>;
- vddwlcx-supply = <&vreg_pmu_wlcx_0p8>;
- vddwlmx-supply = <&vreg_pmu_wlmx_0p85>;
- vddrfacmn-supply = <&vreg_pmu_rfa_cmn>;
- vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>;
- vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>;
- vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>;
+ port {
+ uart14_ep: endpoint {
+ remote-endpoint = <&m2_e_uart_ep>;
+ };
};
};
@@ -1612,6 +1564,21 @@ &usb_2_hsphy {
pinctrl-names = "default";
};
+&usb_2 {
+ ports {
+ port@1 {
+ reg = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ usb_2_m2_ep: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&m2_e_usb_ep>;
+ };
+ };
+ };
+};
+
&usb_mp_hsphy0 {
phys = <&eusb3_repeater>;
};
--
2.34.1