* [PATCH 1/2] dt-bindings: arm: qcom: Add Motorola Moto G10
2026-10-22 21:18 [PATCH 0/2] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
@ 2026-10-22 20:39 ` Michael McAllister
2026-10-22 20:40 ` [PATCH 2/2] arm64: dts: " Michael McAllister
1 sibling, 0 replies; 5+ messages in thread
From: Michael McAllister @ 2026-10-22 20:39 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
Document the Motorola Moto G10 (capri), a smartphone based on the
Qualcomm Snapdragon 460 (SM4250).
Signed-off-by: Michael McAllister <me@michaelmcallister.org>
---
Documentation/devicetree/bindings/arm/qcom.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml
index 121ca557ce..963fd482be 100644
--- a/Documentation/devicetree/bindings/arm/qcom.yaml
+++ b/Documentation/devicetree/bindings/arm/qcom.yaml
@@ -1051,6 +1051,7 @@ properties:
- items:
- enum:
+ - motorola,capri
- oneplus,billie2
- const: qcom,sm4250
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] arm64: dts: qcom: Add Motorola Moto G10
2026-10-22 21:18 [PATCH 0/2] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
2026-10-22 20:39 ` [PATCH 1/2] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
@ 2026-10-22 20:40 ` Michael McAllister
2026-10-22 21:41 ` sashiko-bot
2026-10-23 8:32 ` Konrad Dybcio
1 sibling, 2 replies; 5+ messages in thread
From: Michael McAllister @ 2026-10-22 20:40 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
Add an initial board description for the SM4250-based Motorola Moto G10
(codenamed capri), including eMMC, USB-C, buttons, GPU, Wi-Fi and
Bluetooth. Use the firmware framebuffer until native panel support is
available.
Describe the board-specific firmware carveouts and PSCI state IDs, and
use the shared PM6125 and PMI632 definitions. Put the modem, ADSP and
GPU firmware paths under qcom/motorola/capri/.
Panel, touchscreen, amplifier, sound-card and battery-monitor support
still depend on local drivers and are left for separate submissions.
Signed-off-by: Michael McAllister <me@michaelmcallister.org>
---
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/sm4250-motorola-capri.dts | 452 ++++++++++++++++++
2 files changed, 453 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 88230c4e00..6f2dd88a14 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -383,6 +383,7 @@ shikra-iqs-evk-imx577-camera-dtbs := shikra-iqs-evk.dtb shikra-iqs-evk-imx577-ca
dtb-$(CONFIG_ARCH_QCOM) += shikra-cqm-evk-imx577-camera.dtb
dtb-$(CONFIG_ARCH_QCOM) += shikra-cqs-evk-imx577-camera.dtb
dtb-$(CONFIG_ARCH_QCOM) += shikra-iqs-evk-imx577-camera.dtb
+dtb-$(CONFIG_ARCH_QCOM) += sm4250-motorola-capri.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm4250-oneplus-billie2.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm4450-qrd.dtb
dtb-$(CONFIG_ARCH_QCOM) += sm6115-fxtec-pro1x.dtb
diff --git a/arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts b/arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts
new file mode 100644
index 0000000000..b079f0cdc8
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts
@@ -0,0 +1,452 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
+/*
+ * Copyright (c) 2026 Michael McAllister <me@michaelmcallister.org>
+ *
+ * PM6125 regulator definitions derived from sm4250-oneplus-billie2.dts:
+ * Copyright (c) 2021 Iskren Chernev <iskren.chernev@gmail.com>
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include "sm4250.dtsi"
+#include "pm6125.dtsi"
+#include "pmi632.dtsi"
+
+/ {
+ model = "Motorola Moto G10";
+ compatible = "motorola,capri", "qcom,sm4250";
+
+ /* Used by the bootloader to select the board. */
+ qcom,msm-id = <0x1a1 0x10000>;
+ qcom,board-id = <0 0xb200>;
+
+ aliases {
+ display0 = &framebuffer0;
+ mmc0 = &sdhc_1;
+ serial0 = &uart3;
+ };
+
+ chosen {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ stdout-path = "display0";
+
+ framebuffer0: framebuffer@5c000000 {
+ compatible = "simple-framebuffer";
+ reg = <0 0x5c000000 0 (720 * 1600 * 4)>;
+ display = <&mdss>;
+ format = "a8r8g8b8";
+ height = <1600>;
+ stride = <(720 * 4)>;
+ vddio-supply = <&vreg_l9a>;
+ width = <720>;
+ };
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ pinctrl-0 = <&volume_up_default>;
+ pinctrl-names = "default";
+
+ key-volume-up {
+ debounce-interval = <15>;
+ gpios = <&pm6125_gpios 5 GPIO_ACTIVE_LOW>;
+ label = "Volume Up";
+ linux,code = <KEY_VOLUMEUP>;
+ wakeup-source;
+ };
+ };
+};
+
+/* The stock firmware uses CPU mode 3 and affinity level 1 for these states. */
+&cluster_0_sleep_0 {
+ arm,psci-suspend-param = <0x41000023>;
+};
+
+&cluster_0_sleep_1 {
+ arm,psci-suspend-param = <0x41000043>;
+};
+
+&cluster_1_sleep_0 {
+ arm,psci-suspend-param = <0x41000023>;
+};
+
+&cluster_1_sleep_1 {
+ arm,psci-suspend-param = <0x41000043>;
+};
+
+&gpu {
+ status = "okay";
+};
+
+&gpu_zap_shader {
+ firmware-name = "qcom/motorola/capri/a610_zap.mdt";
+};
+
+&pil_cdsp_mem {
+ reg = <0 0x51a00000 0 0x800000>;
+};
+
+&pm6125_gpios {
+ volume_up_default: volume-up-state {
+ pins = "gpio5";
+ function = "normal";
+ bias-pull-up;
+ input-enable;
+ power-source = <0>;
+ };
+};
+
+&pmi632_typec {
+ status = "okay";
+
+ connector {
+ compatible = "usb-c-connector";
+ data-role = "dual";
+ pd-disable;
+ power-role = "dual";
+ self-powered;
+ typec-power-opmode = "default";
+ vbus-supply = <&pmi632_vbus>;
+
+ port {
+ pmi632_hs_in: endpoint {
+ remote-endpoint = <&usb_dwc3_hs>;
+ };
+ };
+ };
+};
+
+&pmi632_vbus {
+ regulator-min-microamp = <500000>;
+ regulator-max-microamp = <500000>;
+
+ status = "okay";
+};
+
+&pon_pwrkey {
+ status = "okay";
+};
+
+&pon_resin {
+ linux,code = <KEY_VOLUMEDOWN>;
+
+ status = "okay";
+};
+
+&qupv3_id_0 {
+ status = "okay";
+};
+
+&remoteproc_adsp {
+ firmware-name = "qcom/motorola/capri/adsp2.mdt";
+
+ status = "okay";
+};
+
+&remoteproc_mpss {
+ firmware-name = "qcom/motorola/capri/modem.mdt";
+
+ status = "okay";
+};
+
+&reserved_memory {
+ /delete-node/ memory@53800000;
+ /delete-node/ memory@56100000;
+ /delete-node/ memory@56110000;
+ /delete-node/ memory@56115000;
+
+ /* The ADSP and following carveouts differ from the SM6115 defaults. */
+ pil_adsp_mem: memory@52200000 {
+ reg = <0 0x52200000 0 0x1c00000>;
+ no-map;
+ };
+
+ pil_ipa_fw_mem: memory@53e00000 {
+ reg = <0 0x53e00000 0 0x10000>;
+ no-map;
+ };
+
+ pil_ipa_gsi_mem: memory@53e10000 {
+ reg = <0 0x53e10000 0 0x5000>;
+ no-map;
+ };
+
+ pil_gpu_mem: memory@53e15000 {
+ reg = <0 0x53e15000 0 0x2000>;
+ no-map;
+ };
+
+ /* Bootloader debug data. */
+ memory@aef9d800 {
+ reg = <0 0xaef9d800 0 0x62800>;
+ no-map;
+ };
+
+ ramoops@af000000 {
+ compatible = "ramoops";
+ reg = <0 0xaf000000 0 0xbf800>;
+ console-size = <0x40000>;
+ pmsg-size = <0x40000>;
+ record-size = <0x20000>;
+ };
+};
+
+&rpm_requests {
+ regulators-0 {
+ compatible = "qcom,rpm-pm6125-regulators";
+
+ vreg_s6a: s6 {
+ regulator-min-microvolt = <320000>;
+ regulator-max-microvolt = <1456000>;
+ };
+
+ vreg_s7a: s7 {
+ regulator-min-microvolt = <1280000>;
+ regulator-max-microvolt = <2040000>;
+ };
+
+ vreg_s8a: s8 {
+ regulator-min-microvolt = <1064000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ vreg_l1a: l1 {
+ regulator-min-microvolt = <952000>;
+ regulator-max-microvolt = <1152000>;
+ };
+
+ vreg_l4a: l4 {
+ regulator-min-microvolt = <488000>;
+ regulator-max-microvolt = <1000000>;
+ };
+
+ vreg_l5a: l5 {
+ regulator-min-microvolt = <1648000>;
+ regulator-max-microvolt = <3056000>;
+ };
+
+ vreg_l6a: l6 {
+ regulator-min-microvolt = <576000>;
+ regulator-max-microvolt = <656000>;
+ };
+
+ vreg_l7a: l7 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ vreg_l8a: l8 {
+ /* Handset ICNSS DT overrides CX/MX to 640 mV. */
+ regulator-min-microvolt = <640000>;
+ regulator-max-microvolt = <640000>;
+ };
+
+ vreg_l9a: l9 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ /* Display and touch share this rail with Bluetooth. */
+ regulator-boot-on;
+ };
+
+ vreg_l10a: l10 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1904000>;
+ };
+
+ vreg_l11a: l11 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1952000>;
+ };
+
+ vreg_l12a: l12 {
+ regulator-min-microvolt = <1624000>;
+ regulator-max-microvolt = <1984000>;
+ };
+
+ vreg_l13a: l13 {
+ regulator-min-microvolt = <1504000>;
+ regulator-max-microvolt = <1952000>;
+ };
+
+ vreg_l14a: l14 {
+ regulator-min-microvolt = <1704000>;
+ regulator-max-microvolt = <1904000>;
+ };
+
+ vreg_l15a: l15 {
+ regulator-min-microvolt = <2920000>;
+ regulator-max-microvolt = <3232000>;
+ };
+
+ vreg_l16a: l16 {
+ /* ICNSS WCN3990 XO supply setting. */
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ vreg_l17a: l17 {
+ regulator-min-microvolt = <1304000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ vreg_l18a: l18 {
+ regulator-min-microvolt = <1104000>;
+ regulator-max-microvolt = <1304000>;
+ };
+
+ vreg_l19a: l19 {
+ regulator-min-microvolt = <1624000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ vreg_l20a: l20 {
+ regulator-min-microvolt = <1624000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ vreg_l21a: l21 {
+ regulator-min-microvolt = <2400000>;
+ regulator-max-microvolt = <3544000>;
+ };
+
+ vreg_l22a: l22 {
+ regulator-min-microvolt = <2952000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ vreg_l23a: l23 {
+ regulator-min-microvolt = <3296000>;
+ regulator-max-microvolt = <3304000>;
+ };
+
+ vreg_l24a: l24 {
+ regulator-min-microvolt = <2704000>;
+ regulator-max-microvolt = <3544000>;
+ };
+ };
+};
+
+&sdhc_1 {
+ pinctrl-0 = <&sdc1_state_on>;
+ pinctrl-1 = <&sdc1_state_off>;
+ pinctrl-names = "default", "sleep";
+ vmmc-supply = <&vreg_l24a>;
+ vqmmc-supply = <&vreg_l11a>;
+ max-frequency = <50000000>;
+ non-removable;
+
+ status = "okay";
+};
+
+&sleep_clk {
+ clock-frequency = <32764>;
+};
+
+&tlmm {
+ gpio-reserved-ranges = <14 4>;
+
+ bt_uart_default: bt-uart-default-state {
+ cts-pins {
+ pins = "gpio8";
+ function = "qup3";
+ bias-disable;
+ drive-strength = <2>;
+ };
+
+ rts-pins {
+ pins = "gpio9";
+ function = "qup3";
+ bias-pull-down;
+ drive-strength = <2>;
+ };
+
+ tx-rx-pins {
+ pins = "gpio10", "gpio11";
+ function = "qup3";
+ /* Keep RX idle high while the controller TX is tristated. */
+ bias-pull-up;
+ drive-strength = <2>;
+ };
+ };
+
+ bt_uart_sleep: bt-uart-sleep-state {
+ cts-rts-pins {
+ pins = "gpio8", "gpio9";
+ function = "gpio";
+ bias-pull-down;
+ drive-strength = <2>;
+ };
+
+ tx-rx-pins {
+ pins = "gpio10", "gpio11";
+ function = "gpio";
+ bias-pull-up;
+ drive-strength = <2>;
+ };
+ };
+};
+
+&uart3 {
+ interrupts-extended = <&intc GIC_SPI 330 IRQ_TYPE_LEVEL_HIGH>,
+ <&tlmm 11 IRQ_TYPE_EDGE_FALLING>;
+ pinctrl-0 = <&bt_uart_default>;
+ pinctrl-1 = <&bt_uart_sleep>;
+ pinctrl-names = "default", "sleep";
+
+ status = "okay";
+
+ bluetooth {
+ compatible = "qcom,wcn3950-bt";
+ max-speed = <3000000>;
+ vddch0-supply = <&vreg_l23a>;
+ vddio-supply = <&vreg_l9a>;
+ vddrf-supply = <&vreg_l17a>;
+ vddxo-supply = <&vreg_l16a>;
+ };
+};
+
+&usb {
+ /* The connector exposes only the USB 2.0 data pair. */
+ qcom,select-utmi-as-pipe-clk;
+
+ status = "okay";
+};
+
+&usb_dwc3 {
+ dr_mode = "otg";
+ maximum-speed = "high-speed";
+ phy-names = "usb2-phy";
+ phys = <&usb_hsphy>;
+ role-switch-default-mode = "peripheral";
+};
+
+&usb_dwc3_hs {
+ remote-endpoint = <&pmi632_hs_in>;
+};
+
+&usb_hsphy {
+ vdd-supply = <&vreg_l4a>;
+ vdda-phy-dpdm-supply = <&vreg_l15a>;
+ vdda-pll-supply = <&vreg_l12a>;
+
+ status = "okay";
+};
+
+&wifi {
+ vdd-0.8-cx-mx-supply = <&vreg_l8a>;
+ vdd-1.3-rfa-supply = <&vreg_l17a>;
+ vdd-1.8-xo-supply = <&vreg_l16a>;
+ vdd-3.3-ch0-supply = <&vreg_l23a>;
+ qcom,calibration-variant = "Motorola_Capri";
+
+ status = "okay";
+};
+
+&xo_board {
+ clock-frequency = <19200000>;
+};
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 0/2] arm64: dts: qcom: Add initial Motorola Moto G10 support
@ 2026-10-22 21:18 Michael McAllister
2026-10-22 20:39 ` [PATCH 1/2] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
2026-10-22 20:40 ` [PATCH 2/2] arm64: dts: " Michael McAllister
0 siblings, 2 replies; 5+ messages in thread
From: Michael McAllister @ 2026-10-22 21:18 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
This series adds an initial device tree for the Motorola Moto G10
(capri), based on the Qualcomm Snapdragon 460 (SM4250). It adds the board
compatible and describes eMMC, USB-C, power and volume keys, the firmware
framebuffer, regulators, GPU, Wi-Fi, Bluetooth and remote processors.
The board uses the shared PM6125 and PMI632 definitions, with its own
reserved-memory layout and firmware PSCI state IDs. Modem, ADSP and GPU
firmware paths are namespaced under qcom/motorola/capri/.
Native panel, touchscreen, speaker and battery support need separate
driver and binding submissions and are outside this series.
Based on Qualcomm arm64-for-7.4 (Linux 7.3-rc1). Binding and full DT schema
checks pass. The W=1 DTB build reports an inherited unused DSI address/size-
cells warning in sm6115.dtsi, also reproduced with OnePlus Billie2.
Runtime checks covered booting with all eight CPUs, read-only eMMC access
and USB ECM transfers. simpledrm and the power/volume input devices
registered. Thermal readings and an active watchdog were observed.
Physical button events and visible framebuffer output remain unconfirmed.
GPU, Wi-Fi, Bluetooth, remote processors and suspend were not exercised;
the minimal RAM image contained no wireless/DSP firmware or modules.
The test ran without a panic or warning backtrace. A PSCI PC-mode firmware
warning also occurs with the phone's installed kernel; suspend and deeper
idle states remain untested.
For the stock Android bootloader, testing used out-of-tree handoff code
to select this DTB while retaining the firmware RAM map, initramfs and
factory Wi-Fi address, plus an arm64 Image alignment wrapper. That code
is not included here. No other device-specific driver patches were used.
Michael McAllister (2):
dt-bindings: arm: qcom: Add Motorola Moto G10
arm64: dts: qcom: Add Motorola Moto G10
.../devicetree/bindings/arm/qcom.yaml | 1 +
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/sm4250-motorola-capri.dts | 452 ++++++++++++++++++
3 files changed, 454 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts
base-commit: d053e38e614fb2e383b298ce8fc308a780d7f209
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] arm64: dts: qcom: Add Motorola Moto G10
2026-10-22 20:40 ` [PATCH 2/2] arm64: dts: " Michael McAllister
@ 2026-10-22 21:41 ` sashiko-bot
2026-10-23 8:32 ` Konrad Dybcio
1 sibling, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-10-22 21:41 UTC (permalink / raw)
To: Michael McAllister; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] arm64: dts: qcom: capri simple-framebuffer missing display clocks and GDSC
- [Medium] arm64: dts: qcom: sm4250-motorola-capri: wcn3950-bt never powers off in qca_power_off()
--
commit af8b8ef25e8fb618354806c36e99ddefd993ffb6
Author: Michael McAllister <me@michaelmcallister.org>
arm64: dts: qcom: Add Motorola Moto G10
This patch adds an initial device tree for the Motorola Moto G10 (capri)
smartphone, enabling storage, usb type-c, buttons, graphics, wireless,
bluetooth, and a simple-framebuffer display node.
> diff --git a/arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts b/arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts
> new file mode 100644
> index 0000000000000..b079f0cdc800b
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sm4250-motorola-capri.dts
> @@ -0,0 +1,452 @@
[ ... ]
> + chosen {
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges;
> +
> + stdout-path = "display0";
> +
> + framebuffer0: framebuffer@5c000000 {
> + compatible = "simple-framebuffer";
> + reg = <0 0x5c000000 0 (720 * 1600 * 4)>;
> + display = <&mdss>;
> + format = "a8r8g8b8";
> + height = <1600>;
> + stride = <(720 * 4)>;
> + vddio-supply = <&vreg_l9a>;
> + width = <720>;
> + };
> + };
[Severity: High]
Will the display stay powered and clocked after late_initcall cleanup when
booting with this simple-framebuffer node?
In arch/arm64/boot/dts/qcom/sm6115.dtsi, mdss is disabled by default while
both gcc and dispcc are enabled:
arch/arm64/boot/dts/qcom/sm6115.dtsi:
dispcc: clock-controller@5f00000 {
compatible = "qcom,sm6115-dispcc";
...
};
Because mdss is disabled and simple-framebuffer does not claim clocks or
power domains through the display = <&mdss> phandle, nothing claims
gcc_disp_hf_axi_clk in drivers/clk/qcom/gcc-sm6115.c or the display clocks
and mdss_gdsc power domain registered by disp_cc_sm6115_probe() in
drivers/clk/qcom/dispcc-sm6115.c:
drivers/clk/qcom/gcc-sm6115.c:
static struct clk_branch gcc_disp_hf_axi_clk = {
.halt_reg = 0x17020,
.halt_check = BRANCH_HALT,
...
};
drivers/clk/qcom/dispcc-sm6115.c:
static struct gdsc mdss_gdsc = {
.gdscr = 0x3000,
.pd = {
.name = "mdss_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = HW_CTRL,
};
When clk_disable_unused() and pm_genpd_poweroff_unused() run during boot,
won't they disable gcc_disp_hf_axi_clk, the dispcc branch clocks, and
mdss_gdsc, shutting down the active display scanout and stdout-path console?
For comparison, arch/arm64/boot/dts/qcom/sm6115-xiaomi-lemon.dts keeps
gcc_disp_hf_axi_clk enabled in framebuffer0 and disables dispcc until the
panel driver is wired up:
arch/arm64/boot/dts/qcom/sm6115-xiaomi-lemon.dts:
framebuffer0: framebuffer@5c000000 {
...
clocks = <&gcc GCC_DISP_HF_AXI_CLK>;
};
...
&dispcc {
/* Prevent simplefb from dying until we wire panel driver */
status = "disabled";
};
Should framebuffer0 reference gcc_disp_hf_axi_clk (and either disable dispcc
or claim the dispcc clocks and mdss_gdsc) here as well?
[ ... ]
> +&uart3 {
> + interrupts-extended = <&intc GIC_SPI 330 IRQ_TYPE_LEVEL_HIGH>,
> + <&tlmm 11 IRQ_TYPE_EDGE_FALLING>;
> + pinctrl-0 = <&bt_uart_default>;
> + pinctrl-1 = <&bt_uart_sleep>;
> + pinctrl-names = "default", "sleep";
> +
> + status = "okay";
> +
> + bluetooth {
> + compatible = "qcom,wcn3950-bt";
> + max-speed = <3000000>;
> + vddch0-supply = <&vreg_l23a>;
> + vddio-supply = <&vreg_l9a>;
> + vddrf-supply = <&vreg_l17a>;
> + vddxo-supply = <&vreg_l16a>;
> + };
> +};
[Severity: Medium]
Can the bluetooth controller power off cleanly on this board when using
qcom,wcn3950-bt with direct regulator supplies instead of a power sequencer?
In drivers/bluetooth/hci_qca.c, qca_serdev_probe() falls back to direct
regulator control via qca_init_regulators() when devm_pwrseq_get() does not
find a bluetooth power sequencer. While qca_power_on() and
qca_regulator_init() handle the wcn3950 soc_type, both switch statements in
qca_power_off() and the cleanup check in qca_serdev_remove() omit it:
drivers/bluetooth/hci_qca.c:qca_power_off() {
switch (soc_type) {
case QCA_WCN3988:
case QCA_WCN3990:
case QCA_WCN3991:
case QCA_WCN3998:
host_set_baudrate(hu, 2400);
qca_send_power_pulse(hu, false);
break;
default:
break;
}
if (power && power->pwrseq) {
pwrseq_disable(power->pwrseq);
set_bit(QCA_BT_OFF, &qca->flags);
return;
}
switch (soc_type) {
case QCA_WCN3988:
case QCA_WCN3990:
case QCA_WCN3991:
case QCA_WCN3998:
qca_regulator_disable(qcadev);
break;
...
}
drivers/bluetooth/hci_qca.c:qca_serdev_remove() {
switch (qcadev->btsoc_type) {
case QCA_WCN3988:
case QCA_WCN3990:
case QCA_WCN3991:
case QCA_WCN3998:
case QCA_WCN6750:
case QCA_WCN6855:
case QCA_WCN7850:
if (power->vregs_on)
qca_power_off(&qcadev->serdev_hu);
break;
default:
break;
}
}
Without a power-sequencer node (or wcn3950 handling in qca_power_off() and
qca_serdev_remove()), won't powering off bluetooth or unbinding the serdev
driver skip both qca_send_power_pulse(hu, false) and
qca_regulator_disable(qcadev), leaving vddch0, vddio, vddrf, and vddxo
permanently enabled?
--
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1792703903.git.me@michaelmcallister.org?part=2
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] arm64: dts: qcom: Add Motorola Moto G10
2026-10-22 20:40 ` [PATCH 2/2] arm64: dts: " Michael McAllister
2026-10-22 21:41 ` sashiko-bot
@ 2026-10-23 8:32 ` Konrad Dybcio
1 sibling, 0 replies; 5+ messages in thread
From: Konrad Dybcio @ 2026-10-23 8:32 UTC (permalink / raw)
To: Michael McAllister, Bjorn Andersson, Konrad Dybcio
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
On 10/22/26 10:40 PM, Michael McAllister wrote:
> Add an initial board description for the SM4250-based Motorola Moto G10
> (codenamed capri), including eMMC, USB-C, buttons, GPU, Wi-Fi and
> Bluetooth. Use the firmware framebuffer until native panel support is
> available.
[...]
> +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
> +/*
> + * Copyright (c) 2026 Michael McAllister <me@michaelmcallister.org>
> + *
> + * PM6125 regulator definitions derived from sm4250-oneplus-billie2.dts:
> + * Copyright (c) 2021 Iskren Chernev <iskren.chernev@gmail.com>
Did you adjust them to match your specific device? Otherwise you risk
some magic smoke..
> + */
> +
> +/dts-v1/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +#include "sm4250.dtsi"
> +#include "pm6125.dtsi"
> +#include "pmi632.dtsi"
> +
> +/ {
> + model = "Motorola Moto G10";
> + compatible = "motorola,capri", "qcom,sm4250";
> +
> + /* Used by the bootloader to select the board. */
> + qcom,msm-id = <0x1a1 0x10000>;
Please add a line to socinfo (this is SM4250 as you said), include that
header and use the define here
[...]
> +/* The stock firmware uses CPU mode 3 and affinity level 1 for these states. */
> +&cluster_0_sleep_0 {
> + arm,psci-suspend-param = <0x41000023>;
> +};
> +
> +&cluster_0_sleep_1 {
> + arm,psci-suspend-param = <0x41000043>;
> +};
> +
> +&cluster_1_sleep_0 {
> + arm,psci-suspend-param = <0x41000023>;
> +};
> +
> +&cluster_1_sleep_1 {
> + arm,psci-suspend-param = <0x41000043>;
> +};
This isn't customized per-device. I've confirmed these values are
right, please update them in the SoC DTSI in a preceding patch.
We also have this state:
system_sleep_0: system-sleep-0 {
compatible = "domain-idle-state";
arm,psci-suspend-param = <0x42000343>;
entry-latency-us = <10831>;
exit-latency-us = <4506>;
min-residency-us = <15338>;
};
but this is definitely going to stay pending on this series:
https://lore.kernel.org/linux-arm-msm/20261015-b4-shikra_lpm_addition-v2-0-ac7f1a0d5638@oss.qualcomm.com/
[...]
> +&reserved_memory {
> + /delete-node/ memory@53800000;
> + /delete-node/ memory@56100000;
> + /delete-node/ memory@56110000;
> + /delete-node/ memory@56115000;
Please remove these nodes via a &label_reference at the top of the
file instead, so the compiler will do some more checking
[...]
> + /* Bootloader debug data. */
Ultra nit: usually comments don't end in a period
[...]
> + vreg_l8a: l8 {
> + /* Handset ICNSS DT overrides CX/MX to 640 mV. */
This is presumably CX/MX for the bluetooth chip?
I find this comment a bit more on the confusing side rather than helping
> + regulator-min-microvolt = <640000>;
> + regulator-max-microvolt = <640000>;
> + };
> +
> + vreg_l9a: l9 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + /* Display and touch share this rail with Bluetooth. */
This will become self-evident as you add support for these pieces
[...]
> + vreg_l16a: l16 {
> + /* ICNSS WCN3990 XO supply setting. */
This comment feels likewise a little strange
[...]
> +&tlmm {
> + gpio-reserved-ranges = <14 4>;
Do we know what these map to? Usually that's NFC eSE or a fingerprint
scanner. If you do, please add a comment, like in glymur-crd.dtsi
[...]
> +&usb_dwc3 {
> + dr_mode = "otg";
OTG is the default, you can drop this line
> + maximum-speed = "high-speed";
> + phy-names = "usb2-phy";
> + phys = <&usb_hsphy>;
> + role-switch-default-mode = "peripheral";
And this is the default too
Konrad
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-10-23 8:32 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-22 21:18 [PATCH 0/2] arm64: dts: qcom: Add initial Motorola Moto G10 support Michael McAllister
2026-10-22 20:39 ` [PATCH 1/2] dt-bindings: arm: qcom: Add Motorola Moto G10 Michael McAllister
2026-10-22 20:40 ` [PATCH 2/2] arm64: dts: " Michael McAllister
2026-10-22 21:41 ` sashiko-bot
2026-10-23 8:32 ` Konrad Dybcio
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox