[PATCH v6 00/11] arm64: dts: monaco-arduino-monza: Add support for LGA WiFi/BT module
From: Loic Poulain <loic.poulain@oss.qualcomm.com>
Date: 2026-09-04 15:42:21
Also in:
linux-arm-msm, linux-bluetooth, linux-pci, linux-pm, lkml
This series describes support for the onboard WiFi/Bluetooth module present on the Arduino VENTUNO Q (monaco) platform. The board provides LGA pads for a wireless module. On the VENTUNO Q these pads are populated with an NFA725B module featuring the QCA2066 WiFi/BT combo chip. While implemented as an LGA footprint, the design is functionally compatible with the M.2 Key E. The NFA725B exposes WiFi over PCIe and Bluetooth over a UART. Both interfaces are gated through the W_DISABLE1# and W_DISABLE2# signals, as defined by the M.2 specification and handled here via the pcie-m2 power sequencer. This series models the hardware using the existing pwrseq framework and connector bindings, allowing coordinated PCIe and UART bring-up. Signed-off-by: Loic Poulain <loic.poulain@oss.qualcomm.com> --- Changes in v6: - Rebase onto v7.3-rc1: drop the now-upstream "power: sequencing: pcie-m2: Add QCA2066 (QCNFA765) BT serdev ID" patch and adapt to the pwrseq_power_on()/pwrseq_power_off() -> pwrseq_enable()/pwrseq_disable() rename that landed in this merge window. - hci_qca: fully drop struct qca_power and move its fields directly into struct qca_serdev, removing the bt_power indirection (Dmitry). - Pick up Reviewed-by/Acked-by tags from Mani, Bartosz and Dmitry on the pwrseq_is_controllable() API, the pcie-m2/qcom-wcn controllability reporting, the bt_en_available rework and the M.2 connector support patches. - Drop the pwrseq-m2-bt prerequisite series link, it is now merged upstream and included in the v7.3-rc1 base. - Link to v5: https://lore.kernel.org/r/20260720-monza-wireless-v5-0-69ec6743543c@oss.qualcomm.com (local) Changes in v5: - hci_qca: comment why the M.2 'uart' pwrseq lifetime is bound to the serdev consumer device instead of using devm_pwrseq_get() on the controller (Bartosz). - hci_qca: note that dropping the always-on pwrseq handle is not a leak since the descriptor is still released by devres (Bartosz). - Link to v4: https://lore.kernel.org/r/20260716-monza-wireless-v4-0-9b02e6f549d7@oss.qualcomm.com (local) Changes in v4: - pwrseq: rename pwrseq_power_is_controllable() to pwrseq_is_controllable() (Bartosz). - pwrseq: move the is_controllable() callback from the unit to the target (Bartosz). - pwrseq: add might_sleep() and guard pwrseq_is_controllable() against concurrent provider removal with rw_lock, matching pwrseq_power_on/off() (Bartosz). - pwrseq: clarify the pwrseq_is_controllable() doc (Bartosz) - hci_qca: lifetime follows the Bluetooth device rather than the UART controller (ChenYu). - dt-bindings: also add the "qcom,pcie-m2-1620-lga-connector" compatible (Mani). - arm64: dts: monaco-arduino-monza: rename the 'pcie_bridge_ep' endpoint to 'pcie_ep' (Mani). - pwrseq: reword commmit message (Mani) - Link to v3: https://lore.kernel.org/r/20260710-monza-wireless-v3-0-46253587af64@oss.qualcomm.com (local) Changes in v3: - Embed bt_power in struct qca_serdev instead of allocating it (Dmitry). - Add generic pwrseq_is_controllable() API + per-target .is_controllable() callback; use it in hci_qca instead of peeking at the W_DISABLE2# property. - Implement .is_controllable() in the pcie-m2 and qcom-wcn providers. - Treat non-controllable BT power as always-on. - Integrate the pending Bluetooth pwrseq patches from Mani. - Link to v2: https://lore.kernel.org/r/20260702-monza-wireless-v2-0-7b56e2a6a6d4@oss.qualcomm.com (local) Changes in v2: - hci_qca: extract M.2 pwrseq into qca_serdev_get_m2_pwrseq() helper, called outside the SoC switch; drop duplicated of_graph logic and redundant bt_power NULL checks (Dmitry/Mani) - dts/bindings: use qcom,pcie-m2-1418-lga-connector (fallback pcie-m2-e-connector) instead of the generic M.2 E-key compatible (Mani) - Link to v1: https://lore.kernel.org/r/20260520-monza-wireless-v1-0-9f6942310653@oss.qualcomm.com (local) --- Loic Poulain (9): power: sequencing: Add pwrseq_is_controllable() API power: sequencing: pcie-m2: Report power controllability power: sequencing: qcom-wcn: Report power controllability Bluetooth: hci_qca: Set 'bt_en_available' based on pwrseq power controllability Bluetooth: hci_qca: Embed bt_power in struct qca_serdev Bluetooth: hci_qca: Support QCA2066 on M.2 connector via pwrseq Bluetooth: hci_qca: Flatten struct qca_power into struct qca_serdev dt-bindings: connector: pcie-m2-e: Add vendor LGA connector compatible arm64: dts: qcom: monaco-arduino-monza: Add QCA2066 M.2 WiFi/BT support Manivannan Sadhasivam (2): Bluetooth: hci_qca: Add M.2 Bluetooth device support using pwrseq Bluetooth: hci_qca: Rename 'power_ctrl_enabled' to 'bt_en_available' .../bindings/connector/pcie-m2-e-connector.yaml | 8 +- arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts | 64 ++++++++- drivers/bluetooth/hci_qca.c | 160 ++++++++++++--------- drivers/power/sequencing/core.c | 49 +++++++ drivers/power/sequencing/pwrseq-pcie-m2.c | 26 ++++ drivers/power/sequencing/pwrseq-qcom-wcn.c | 30 ++++ include/linux/pwrseq/consumer.h | 7 + include/linux/pwrseq/provider.h | 8 ++ 8 files changed, 277 insertions(+), 75 deletions(-) --- base-commit: cee9395acd8043be0644b25c34bfa86623f2b935 change-id: 20260520-monza-wireless-e6ce7f013f38 Best regards, -- Loic Poulain [off-list ref]