From 3c334fee8d38821c76ee9eee82bc0fae5c90c4ec Mon Sep 17 00:00:00 2001 From: Dhruvin Rajpura Date: Fri, 14 Aug 2026 14:08:12 +0530 Subject: [PATCH 1/2] pinctrl: qcom: spmi-gpio: add PMAU0102 and PMM8650AU compatibles Add SPMI GPIO compatible strings for the PMAU0102 and PMM8650AU PMICs used on Nord, each with 12 GPIOs, so the driver can bind against the new per-chip PMIC dtsi nodes. --- drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c index cdd61dae74cf9..167b212961f3d 100644 --- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c +++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c @@ -1274,7 +1274,9 @@ static const struct of_device_id pmic_gpio_of_match[] = { { .compatible = "qcom,pmk8350-gpio", .data = (void *) 4 }, { .compatible = "qcom,pmk8550-gpio", .data = (void *) 6 }, { .compatible = "qcom,pmk8850-gpio", .data = (void *)8 }, + { .compatible = "qcom,pmau0102-gpio", .data = (void *) 12 }, { .compatible = "qcom,pmm8155au-gpio", .data = (void *) 10 }, + { .compatible = "qcom,pmm8650au-gpio", .data = (void *) 12 }, { .compatible = "qcom,pmm8654au-gpio", .data = (void *) 12 }, /* pmp8074 has 12 GPIOs with holes on 1 and 12 */ { .compatible = "qcom,pmp8074-gpio", .data = (void *) 12 }, From 9405b739fc4a72c9df19da09e5ee0a085db43de5 Mon Sep 17 00:00:00 2001 From: Dhruvin Rajpura Date: Fri, 14 Aug 2026 14:08:30 +0530 Subject: [PATCH 2/2] arm64: dts: qcom: nord: add PMAU0102 and PMM8650AU PMIC support PMAU0102 and PMM8650AU are new PMICs used on nord-rrd and nord-ride-sx that are not present on lemans/monaco, so there is no existing dtsi to reuse. Add per-chip PMIC dtsi files (pmau0102-nord.dtsi, pmm8650au-nord.dtsi) with their peripheral definitions (temp-alarm, pon, rtc, gpio), matching the hardware-per-file convention used for other PMICs. Update the spmi_bus controller node in nord.dtsi accordingly and switch nord-rrd.dts/nord-ride-sx.dts to include the new per-chip dtsi files. --- arch/arm64/boot/dts/qcom/nord-ride-sx.dts | 11 +- arch/arm64/boot/dts/qcom/nord-rrd.dts | 2 + arch/arm64/boot/dts/qcom/nord.dtsi | 4 +- arch/arm64/boot/dts/qcom/pmau0102-nord.dtsi | 285 +++++++++++++++++++ arch/arm64/boot/dts/qcom/pmm8650au-nord.dtsi | 111 ++++++++ 5 files changed, 407 insertions(+), 6 deletions(-) create mode 100644 arch/arm64/boot/dts/qcom/pmau0102-nord.dtsi create mode 100644 arch/arm64/boot/dts/qcom/pmm8650au-nord.dtsi diff --git a/arch/arm64/boot/dts/qcom/nord-ride-sx.dts b/arch/arm64/boot/dts/qcom/nord-ride-sx.dts index b6a3c9cc1a86b..f9fa0849e396a 100644 --- a/arch/arm64/boot/dts/qcom/nord-ride-sx.dts +++ b/arch/arm64/boot/dts/qcom/nord-ride-sx.dts @@ -9,7 +9,8 @@ #include #include "nord-embedded.dtsi" -#include "nord-pmics.dtsi" +#include "pmm8650au-nord.dtsi" +#include "pmau0102-nord.dtsi" / { model = "Qualcomm Technologies, Inc. Nord Ride SX"; @@ -74,7 +75,7 @@ regulator-name = "usb2_vbus"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; - gpio = <&pmic_h_gpios 3 GPIO_ACTIVE_HIGH>; + gpio = <&pmau0102_h_gpios 3 GPIO_ACTIVE_HIGH>; enable-active-high; regulator-always-on; }; @@ -533,7 +534,7 @@ vdd1v8-supply = <&vreg_l3l_1p8>; - reset-gpios = <&pmic_i_gpios 9 GPIO_ACTIVE_LOW>; + reset-gpios = <&pmau0102_i_gpios 9 GPIO_ACTIVE_LOW>; }; usb1_repeater: redriver@4f { @@ -543,7 +544,7 @@ vdd1v8-supply = <&vreg_l3l_1p8>; - reset-gpios = <&pmic_i_gpios 10 GPIO_ACTIVE_LOW>; + reset-gpios = <&pmau0102_i_gpios 10 GPIO_ACTIVE_LOW>; }; usb2_repeater: redriver@47 { @@ -553,7 +554,7 @@ vdd1v8-supply = <&vreg_l3l_1p8>; - reset-gpios = <&pmic_l_gpios 3 GPIO_ACTIVE_LOW>; + reset-gpios = <&pmau0102_l_gpios 3 GPIO_ACTIVE_LOW>; }; }; diff --git a/arch/arm64/boot/dts/qcom/nord-rrd.dts b/arch/arm64/boot/dts/qcom/nord-rrd.dts index a2a19f2304fa1..263cf2eafecf1 100644 --- a/arch/arm64/boot/dts/qcom/nord-rrd.dts +++ b/arch/arm64/boot/dts/qcom/nord-rrd.dts @@ -9,6 +9,8 @@ #include #include "nord-embedded.dtsi" +#include "pmm8650au-nord.dtsi" +#include "pmau0102-nord.dtsi" / { model = "Qualcomm Technologies, Inc. IQ10 RRD"; diff --git a/arch/arm64/boot/dts/qcom/nord.dtsi b/arch/arm64/boot/dts/qcom/nord.dtsi index e17bd52dd8dea..ec7bc4a312847 100644 --- a/arch/arm64/boot/dts/qcom/nord.dtsi +++ b/arch/arm64/boot/dts/qcom/nord.dtsi @@ -1721,15 +1721,17 @@ reg = <0x0 0x0c400000 0x0 0x3000>, <0x0 0x0c500000 0x0 0x400000>, <0x0 0x0c440000 0x0 0x80000>, - <0x0 0x0c4c0000 0x0 0x20000>, + <0x0 0x0c4c0000 0x0 0x10000>, <0x0 0x0c42d000 0x0 0x4000>; reg-names = "core", "chnls", "obsrvr", "intr", "cnfg"; + cell-index = <0>; qcom,channel = <0>; qcom,ee = <0>; + qcom,bus-id = <0>; interrupts-extended = <&pdc 1 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "periph_irq"; interrupt-controller; diff --git a/arch/arm64/boot/dts/qcom/pmau0102-nord.dtsi b/arch/arm64/boot/dts/qcom/pmau0102-nord.dtsi new file mode 100644 index 0000000000000..fe29071a4f789 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/pmau0102-nord.dtsi @@ -0,0 +1,285 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#include +#include + +&spmi_bus { + pmau0102_e: pmic@4 { + compatible = "qcom,pmau0102", "qcom,spmi-pmic"; + reg = <0x4 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + pmau0102_e_temp_alarm: temp-alarm@a00 { + compatible = "qcom,spmi-temp-alarm"; + reg = <0xa00>; + interrupts = <0x4 0xa 0x0 IRQ_TYPE_EDGE_BOTH>; + #thermal-sensor-cells = <0>; + }; + + pmau0102_e_gpios: gpio@8800 { + compatible = "qcom,pmau0102-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&pmau0102_e_gpios 0 0 12>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + pmau0102_f: pmic@5 { + compatible = "qcom,pmau0102", "qcom,spmi-pmic"; + reg = <0x5 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + pmau0102_f_temp_alarm: temp-alarm@a00 { + compatible = "qcom,spmi-temp-alarm"; + reg = <0xa00>; + interrupts = <0x5 0xa 0x0 IRQ_TYPE_EDGE_BOTH>; + #thermal-sensor-cells = <0>; + }; + + pmau0102_f_gpios: gpio@8800 { + compatible = "qcom,pmau0102-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&pmau0102_f_gpios 0 0 12>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + pmau0102_g: pmic@6 { + compatible = "qcom,pmau0102", "qcom,spmi-pmic"; + reg = <0x6 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + pmau0102_g_temp_alarm: temp-alarm@a00 { + compatible = "qcom,spmi-temp-alarm"; + reg = <0xa00>; + interrupts = <0x6 0xa 0x0 IRQ_TYPE_EDGE_BOTH>; + #thermal-sensor-cells = <0>; + }; + + pmau0102_g_gpios: gpio@8800 { + compatible = "qcom,pmau0102-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&pmau0102_g_gpios 0 0 12>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + pmau0102_h: pmic@7 { + compatible = "qcom,pmau0102", "qcom,spmi-pmic"; + reg = <0x7 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + pmau0102_h_temp_alarm: temp-alarm@a00 { + compatible = "qcom,spmi-temp-alarm"; + reg = <0xa00>; + interrupts = <0x7 0xa 0x0 IRQ_TYPE_EDGE_BOTH>; + #thermal-sensor-cells = <0>; + }; + + pmau0102_h_gpios: gpio@8800 { + compatible = "qcom,pmau0102-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&pmau0102_h_gpios 0 0 12>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + pmau0102_i: pmic@8 { + compatible = "qcom,pmau0102", "qcom,spmi-pmic"; + reg = <0x8 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + pmau0102_i_temp_alarm: temp-alarm@a00 { + compatible = "qcom,spmi-temp-alarm"; + reg = <0xa00>; + interrupts = <0x8 0xa 0x0 IRQ_TYPE_EDGE_BOTH>; + #thermal-sensor-cells = <0>; + }; + + pmau0102_i_gpios: gpio@8800 { + compatible = "qcom,pmau0102-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&pmau0102_i_gpios 0 0 12>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + pmau0102_j: pmic@9 { + compatible = "qcom,pmau0102", "qcom,spmi-pmic"; + reg = <0x9 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + pmau0102_j_temp_alarm: temp-alarm@a00 { + compatible = "qcom,spmi-temp-alarm"; + reg = <0xa00>; + interrupts = <0x9 0xa 0x0 IRQ_TYPE_EDGE_BOTH>; + #thermal-sensor-cells = <0>; + }; + + pmau0102_j_gpios: gpio@8800 { + compatible = "qcom,pmau0102-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&pmau0102_j_gpios 0 0 12>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + pmau0102_k: pmic@a { + compatible = "qcom,pmau0102", "qcom,spmi-pmic"; + reg = <0xa SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + pmau0102_k_temp_alarm: temp-alarm@a00 { + compatible = "qcom,spmi-temp-alarm"; + reg = <0xa00>; + interrupts = <0xa 0xa 0x0 IRQ_TYPE_EDGE_BOTH>; + #thermal-sensor-cells = <0>; + }; + + pmau0102_k_gpios: gpio@8800 { + compatible = "qcom,pmau0102-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&pmau0102_k_gpios 0 0 12>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + pmau0102_l: pmic@b { + compatible = "qcom,pmau0102", "qcom,spmi-pmic"; + reg = <0xb SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + pmau0102_l_temp_alarm: temp-alarm@a00 { + compatible = "qcom,spmi-temp-alarm"; + reg = <0xa00>; + interrupts = <0xb 0xa 0x0 IRQ_TYPE_EDGE_BOTH>; + #thermal-sensor-cells = <0>; + }; + + pmau0102_l_gpios: gpio@8800 { + compatible = "qcom,pmau0102-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&pmau0102_l_gpios 0 0 12>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; +}; + +/ { + thermal-zones { + pmau0102_e_thermal: pmau0102-e-thermal { + polling-delay-passive = <100>; + thermal-sensors = <&pmau0102_e_temp_alarm>; + trips { + trip0 { temperature = <95000>; hysteresis = <0>; type = "passive"; }; + trip1 { temperature = <115000>; hysteresis = <0>; type = "hot"; }; + trip2 { temperature = <145000>; hysteresis = <0>; type = "critical"; }; + }; + }; + + pmau0102_f_thermal: pmau0102-f-thermal { + polling-delay-passive = <100>; + thermal-sensors = <&pmau0102_f_temp_alarm>; + trips { + trip0 { temperature = <95000>; hysteresis = <0>; type = "passive"; }; + trip1 { temperature = <115000>; hysteresis = <0>; type = "hot"; }; + trip2 { temperature = <145000>; hysteresis = <0>; type = "critical"; }; + }; + }; + + pmau0102_g_thermal: pmau0102-g-thermal { + polling-delay-passive = <100>; + thermal-sensors = <&pmau0102_g_temp_alarm>; + trips { + trip0 { temperature = <95000>; hysteresis = <0>; type = "passive"; }; + trip1 { temperature = <115000>; hysteresis = <0>; type = "hot"; }; + trip2 { temperature = <145000>; hysteresis = <0>; type = "critical"; }; + }; + }; + + pmau0102_h_thermal: pmau0102-h-thermal { + polling-delay-passive = <100>; + thermal-sensors = <&pmau0102_h_temp_alarm>; + trips { + trip0 { temperature = <95000>; hysteresis = <0>; type = "passive"; }; + trip1 { temperature = <115000>; hysteresis = <0>; type = "hot"; }; + trip2 { temperature = <145000>; hysteresis = <0>; type = "critical"; }; + }; + }; + + pmau0102_i_thermal: pmau0102-i-thermal { + polling-delay-passive = <100>; + thermal-sensors = <&pmau0102_i_temp_alarm>; + trips { + trip0 { temperature = <95000>; hysteresis = <0>; type = "passive"; }; + trip1 { temperature = <115000>; hysteresis = <0>; type = "hot"; }; + trip2 { temperature = <145000>; hysteresis = <0>; type = "critical"; }; + }; + }; + + pmau0102_j_thermal: pmau0102-j-thermal { + polling-delay-passive = <100>; + thermal-sensors = <&pmau0102_j_temp_alarm>; + trips { + trip0 { temperature = <95000>; hysteresis = <0>; type = "passive"; }; + trip1 { temperature = <115000>; hysteresis = <0>; type = "hot"; }; + trip2 { temperature = <145000>; hysteresis = <0>; type = "critical"; }; + }; + }; + + pmau0102_k_thermal: pmau0102-k-thermal { + polling-delay-passive = <100>; + thermal-sensors = <&pmau0102_k_temp_alarm>; + trips { + trip0 { temperature = <95000>; hysteresis = <0>; type = "passive"; }; + trip1 { temperature = <115000>; hysteresis = <0>; type = "hot"; }; + trip2 { temperature = <145000>; hysteresis = <0>; type = "critical"; }; + }; + }; + + pmau0102_l_thermal: pmau0102-l-thermal { + polling-delay-passive = <100>; + thermal-sensors = <&pmau0102_l_temp_alarm>; + trips { + trip0 { temperature = <95000>; hysteresis = <0>; type = "passive"; }; + trip1 { temperature = <115000>; hysteresis = <0>; type = "hot"; }; + trip2 { temperature = <145000>; hysteresis = <0>; type = "critical"; }; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/qcom/pmm8650au-nord.dtsi b/arch/arm64/boot/dts/qcom/pmm8650au-nord.dtsi new file mode 100644 index 0000000000000..f24ecc34d533d --- /dev/null +++ b/arch/arm64/boot/dts/qcom/pmm8650au-nord.dtsi @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#include +#include +#include +#include + +&spmi_bus { + kobra_mm_a: pmic@0 { + compatible = "qcom,pmm8650au", "qcom,spmi-pmic"; + reg = <0x0 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + kobra_mm_a_temp_alarm: temp-alarm@a00 { + compatible = "qcom,spmi-temp-alarm"; + reg = <0xa00>; + interrupts = <0x0 0xa 0x0 IRQ_TYPE_EDGE_BOTH>; + #thermal-sensor-cells = <0>; + }; + + kobra_mm_a_pon: pon@1200 { + compatible = "qcom,pmk8350-pon"; + reg = <0x1200>, <0x800>; + reg-names = "hlos", "pbs"; + + kobra_mm_a_pon_pwrkey: pwrkey { + compatible = "qcom,pmk8350-pwrkey"; + interrupts-extended = <&spmi_bus 0x0 0x12 0x7 IRQ_TYPE_EDGE_BOTH>; + linux,code = ; + debounce = <15625>; + }; + + kobra_mm_a_pon_resin: resin { + compatible = "qcom,pmk8350-resin"; + interrupts-extended = <&spmi_bus 0x0 0x12 0x6 IRQ_TYPE_EDGE_BOTH>; + debounce = <15625>; + status = "disabled"; + }; + }; + + kobra_mm_a_rtc: rtc@6100 { + compatible = "qcom,pmk8350-rtc"; + reg = <0x6100>, + <0x6200>; + reg-names = "rtc", + "alarm"; + interrupts = <0x0 0x62 0x1 IRQ_TYPE_EDGE_RISING>; + }; + + kobra_mm_a_gpios: gpio@8800 { + compatible = "qcom,pmm8650au-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&kobra_mm_a_gpios 0 0 12>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + kobra_psail_b: pmic@1 { + compatible = "qcom,pmm8650au", "qcom,spmi-pmic"; + reg = <0x1 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + kobra_psail_b_gpios: gpio@8800 { + compatible = "qcom,pmm8650au-gpio", "qcom,spmi-gpio"; + reg = <0x8800>; + gpio-controller; + gpio-ranges = <&kobra_psail_b_gpios 0 0 2>; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; +}; + +/ { + thermal-zones { + kobra_mm_a_thermal: kobra-a-thermal { + polling-delay-passive = <100>; + + thermal-sensors = <&kobra_mm_a_temp_alarm>; + + trips { + trip0 { + temperature = <95000>; + hysteresis = <0>; + type = "passive"; + }; + + trip1 { + temperature = <115000>; + hysteresis = <0>; + type = "hot"; + }; + + trip2 { + temperature = <145000>; + hysteresis = <0>; + type = "critical"; + }; + }; + }; + }; +};