[PATCH] pinctrl: qcom: eliza: Split up some QUP pin groups
From: Alexander Koskovich
Date: Sat Apr 18 2026 - 06:43:02 EST
Multiple QUPs have lanes that can be routed to one of two GPIOs and
collapsing them prevents devicetrees from requesting specific routing.
For example, a board that wires an I2C SCL line to one of two GPIOs
cannot request that specific pin with the groups collapsed.
This change splits them up so devicetrees can request the configuration
they need.
Signed-off-by: Alexander Koskovich <akoskovich@xxxxx>
---
drivers/pinctrl/qcom/pinctrl-eliza.c | 200 +++++++++++++++++++++++++++++------
1 file changed, 169 insertions(+), 31 deletions(-)
diff --git a/drivers/pinctrl/qcom/pinctrl-eliza.c b/drivers/pinctrl/qcom/pinctrl-eliza.c
index c1f756cbcdeb..a1365bcd3bf6 100644
--- a/drivers/pinctrl/qcom/pinctrl-eliza.c
+++ b/drivers/pinctrl/qcom/pinctrl-eliza.c
@@ -562,16 +562,39 @@ enum eliza_functions {
msm_mux_qspi_cs,
msm_mux_qup1_se0,
msm_mux_qup1_se1,
- msm_mux_qup1_se2,
+ msm_mux_qup1_se2_l0,
+ msm_mux_qup1_se2_l1,
+ msm_mux_qup1_se2_l2_mira,
+ msm_mux_qup1_se2_l2_mirb,
+ msm_mux_qup1_se2_l3_mira,
+ msm_mux_qup1_se2_l3_mirb,
+ msm_mux_qup1_se2_l4,
+ msm_mux_qup1_se2_l5,
+ msm_mux_qup1_se2_l6,
msm_mux_qup1_se3,
msm_mux_qup1_se4,
msm_mux_qup1_se5,
- msm_mux_qup1_se6,
- msm_mux_qup1_se7,
+ msm_mux_qup1_se6_l0,
+ msm_mux_qup1_se6_l1_mira,
+ msm_mux_qup1_se6_l1_mirb,
+ msm_mux_qup1_se6_l2,
+ msm_mux_qup1_se6_l3_mira,
+ msm_mux_qup1_se6_l3_mirb,
+ msm_mux_qup1_se7_l0_mira,
+ msm_mux_qup1_se7_l0_mirb,
+ msm_mux_qup1_se7_l1_mira,
+ msm_mux_qup1_se7_l1_mirb,
+ msm_mux_qup1_se7_l2,
+ msm_mux_qup1_se7_l3,
msm_mux_qup2_se0,
msm_mux_qup2_se1,
msm_mux_qup2_se2,
- msm_mux_qup2_se3,
+ msm_mux_qup2_se3_l0_mira,
+ msm_mux_qup2_se3_l0_mirb,
+ msm_mux_qup2_se3_l1_mira,
+ msm_mux_qup2_se3_l1_mirb,
+ msm_mux_qup2_se3_l2,
+ msm_mux_qup2_se3_l3,
msm_mux_qup2_se4,
msm_mux_qup2_se5,
msm_mux_qup2_se6,
@@ -977,8 +1000,40 @@ static const char *const qup1_se1_groups[] = {
"gpio32", "gpio33", "gpio34", "gpio35",
};
-static const char *const qup1_se2_groups[] = {
- "gpio52", "gpio53", "gpio54", "gpio52", "gpio55", "gpio53", "gpio40", "gpio42", "gpio30",
+static const char *const qup1_se2_l0_groups[] = {
+ "gpio52",
+};
+
+static const char *const qup1_se2_l1_groups[] = {
+ "gpio53",
+};
+
+static const char *const qup1_se2_l2_mira_groups[] = {
+ "gpio54",
+};
+
+static const char *const qup1_se2_l2_mirb_groups[] = {
+ "gpio52",
+};
+
+static const char *const qup1_se2_l3_mira_groups[] = {
+ "gpio55",
+};
+
+static const char *const qup1_se2_l3_mirb_groups[] = {
+ "gpio53",
+};
+
+static const char *const qup1_se2_l4_groups[] = {
+ "gpio40",
+};
+
+static const char *const qup1_se2_l5_groups[] = {
+ "gpio42",
+};
+
+static const char *const qup1_se2_l6_groups[] = {
+ "gpio30",
};
static const char *const qup1_se3_groups[] = {
@@ -993,12 +1048,52 @@ static const char *const qup1_se5_groups[] = {
"gpio132", "gpio133", "gpio134", "gpio135", "gpio34", "gpio35",
};
-static const char *const qup1_se6_groups[] = {
- "gpio40", "gpio42", "gpio54", "gpio42", "gpio40", "gpio55",
+static const char *const qup1_se6_l0_groups[] = {
+ "gpio40",
+};
+
+static const char *const qup1_se6_l1_mira_groups[] = {
+ "gpio42",
+};
+
+static const char *const qup1_se6_l1_mirb_groups[] = {
+ "gpio54",
+};
+
+static const char *const qup1_se6_l2_groups[] = {
+ "gpio42",
+};
+
+static const char *const qup1_se6_l3_mira_groups[] = {
+ "gpio40",
};
-static const char *const qup1_se7_groups[] = {
- "gpio81", "gpio78", "gpio80", "gpio114", "gpio114", "gpio78",
+static const char *const qup1_se6_l3_mirb_groups[] = {
+ "gpio55",
+};
+
+static const char *const qup1_se7_l0_mira_groups[] = {
+ "gpio81",
+};
+
+static const char *const qup1_se7_l0_mirb_groups[] = {
+ "gpio78",
+};
+
+static const char *const qup1_se7_l1_mira_groups[] = {
+ "gpio80",
+};
+
+static const char *const qup1_se7_l1_mirb_groups[] = {
+ "gpio114",
+};
+
+static const char *const qup1_se7_l2_groups[] = {
+ "gpio114",
+};
+
+static const char *const qup1_se7_l3_groups[] = {
+ "gpio78",
};
static const char *const qup2_se0_groups[] = {
@@ -1013,8 +1108,28 @@ static const char *const qup2_se2_groups[] = {
"gpio8", "gpio9", "gpio10", "gpio11", "gpio16", "gpio17", "gpio18",
};
-static const char *const qup2_se3_groups[] = {
- "gpio79", "gpio116", "gpio97", "gpio100", "gpio100", "gpio116",
+static const char *const qup2_se3_l0_mira_groups[] = {
+ "gpio79",
+};
+
+static const char *const qup2_se3_l0_mirb_groups[] = {
+ "gpio116",
+};
+
+static const char *const qup2_se3_l1_mira_groups[] = {
+ "gpio97",
+};
+
+static const char *const qup2_se3_l1_mirb_groups[] = {
+ "gpio100",
+};
+
+static const char *const qup2_se3_l2_groups[] = {
+ "gpio100",
+};
+
+static const char *const qup2_se3_l3_groups[] = {
+ "gpio116",
};
static const char *const qup2_se4_groups[] = {
@@ -1235,16 +1350,39 @@ static const struct pinfunction eliza_functions[] = {
MSM_PIN_FUNCTION(qspi_cs),
MSM_PIN_FUNCTION(qup1_se0),
MSM_PIN_FUNCTION(qup1_se1),
- MSM_PIN_FUNCTION(qup1_se2),
+ MSM_PIN_FUNCTION(qup1_se2_l0),
+ MSM_PIN_FUNCTION(qup1_se2_l1),
+ MSM_PIN_FUNCTION(qup1_se2_l2_mira),
+ MSM_PIN_FUNCTION(qup1_se2_l2_mirb),
+ MSM_PIN_FUNCTION(qup1_se2_l3_mira),
+ MSM_PIN_FUNCTION(qup1_se2_l3_mirb),
+ MSM_PIN_FUNCTION(qup1_se2_l4),
+ MSM_PIN_FUNCTION(qup1_se2_l5),
+ MSM_PIN_FUNCTION(qup1_se2_l6),
MSM_PIN_FUNCTION(qup1_se3),
MSM_PIN_FUNCTION(qup1_se4),
MSM_PIN_FUNCTION(qup1_se5),
- MSM_PIN_FUNCTION(qup1_se6),
- MSM_PIN_FUNCTION(qup1_se7),
+ MSM_PIN_FUNCTION(qup1_se6_l0),
+ MSM_PIN_FUNCTION(qup1_se6_l1_mira),
+ MSM_PIN_FUNCTION(qup1_se6_l1_mirb),
+ MSM_PIN_FUNCTION(qup1_se6_l2),
+ MSM_PIN_FUNCTION(qup1_se6_l3_mira),
+ MSM_PIN_FUNCTION(qup1_se6_l3_mirb),
+ MSM_PIN_FUNCTION(qup1_se7_l0_mira),
+ MSM_PIN_FUNCTION(qup1_se7_l0_mirb),
+ MSM_PIN_FUNCTION(qup1_se7_l1_mira),
+ MSM_PIN_FUNCTION(qup1_se7_l1_mirb),
+ MSM_PIN_FUNCTION(qup1_se7_l2),
+ MSM_PIN_FUNCTION(qup1_se7_l3),
MSM_PIN_FUNCTION(qup2_se0),
MSM_PIN_FUNCTION(qup2_se1),
MSM_PIN_FUNCTION(qup2_se2),
- MSM_PIN_FUNCTION(qup2_se3),
+ MSM_PIN_FUNCTION(qup2_se3_l0_mira),
+ MSM_PIN_FUNCTION(qup2_se3_l0_mirb),
+ MSM_PIN_FUNCTION(qup2_se3_l1_mira),
+ MSM_PIN_FUNCTION(qup2_se3_l1_mirb),
+ MSM_PIN_FUNCTION(qup2_se3_l2),
+ MSM_PIN_FUNCTION(qup2_se3_l3),
MSM_PIN_FUNCTION(qup2_se4),
MSM_PIN_FUNCTION(qup2_se5),
MSM_PIN_FUNCTION(qup2_se6),
@@ -1316,7 +1454,7 @@ static const struct msm_pingroup eliza_groups[] = {
[27] = PINGROUP(27, qup2_se4, aoss_cti, mdp_vsync11_out, qup2_se7, gcc_gp1, _, _, _, _, _, _),
[28] = PINGROUP(28, qup1_se0, ibi_i3c, _, _, _, _, _, _, _, _, egpio),
[29] = PINGROUP(29, qup1_se0, ibi_i3c, _, _, _, _, _, _, _, _, egpio),
- [30] = PINGROUP(30, qup1_se0, qup1_se2, cci_async_in, gcc_gp3, qdss_gpio_tracedata, _, _, _, _, _, egpio),
+ [30] = PINGROUP(30, qup1_se0, qup1_se2_l6, cci_async_in, gcc_gp3, qdss_gpio_tracedata, _, _, _, _, _, egpio),
[31] = PINGROUP(31, qup1_se0, cci_async_in, qdss_gpio_tracedata, _, _, _, _, _, _, _, egpio),
[32] = PINGROUP(32, qup1_se1, ibi_i3c, audio_ref_clk, gcc_gp2, qdss_cti, _, _, _, _, _, _),
[33] = PINGROUP(33, qup1_se1, ibi_i3c, host2wlan_sol, gcc_gp3, _, _, _, _, _, _, _),
@@ -1326,9 +1464,9 @@ static const struct msm_pingroup eliza_groups[] = {
[37] = PINGROUP(37, qup1_se4, qup1_se4, ibi_i3c, _, _, _, _, _, _, _, _),
[38] = PINGROUP(38, _, _, _, _, _, _, _, _, _, _, _),
[39] = PINGROUP(39, _, _, _, _, _, _, _, _, _, _, _),
- [40] = PINGROUP(40, qup1_se6, qup1_se2, qup1_se6, _, qdss_gpio_tracedata, gnss_adc1, ddr_pxi1, _, _, _, _),
+ [40] = PINGROUP(40, qup1_se6_l0, qup1_se2_l4, qup1_se6_l3_mira, _, qdss_gpio_tracedata, gnss_adc1, ddr_pxi1, _, _, _, _),
[41] = PINGROUP(41, _, _, _, _, _, _, _, _, _, _, _),
- [42] = PINGROUP(42, qup1_se6, qup1_se2, qup1_se6, qdss_gpio_tracedata, gnss_adc0, ddr_pxi1, _, _, _, _, _),
+ [42] = PINGROUP(42, qup1_se6_l2, qup1_se2_l5, qup1_se6_l1_mira, qdss_gpio_tracedata, gnss_adc0, ddr_pxi1, _, _, _, _, _),
[43] = PINGROUP(43, _, _, _, _, _, _, _, _, _, _, _),
[44] = PINGROUP(44, qup1_se3, _, _, _, _, _, _, _, _, _, _),
[45] = PINGROUP(45, qup1_se3, _, _, _, _, _, _, _, _, _, _),
@@ -1338,10 +1476,10 @@ static const struct msm_pingroup eliza_groups[] = {
[49] = PINGROUP(49, _, _, _, _, _, _, _, _, _, _, _),
[50] = PINGROUP(50, sdc2_fb_clk, _, _, _, _, _, _, _, _, _, _),
[51] = PINGROUP(51, _, _, _, _, _, _, _, _, _, _, _),
- [52] = PINGROUP(52, qup1_se2, pcie1_clk_req_n, qup1_se2, ddr_bist_complete, qdss_gpio_tracedata, _, vsense_trigger_mirnat, _, _, _, _),
- [53] = PINGROUP(53, qup1_se2, qup1_se2, gcc_gp1, ddr_bist_stop, _, qdss_gpio_tracedata, _, _, _, _, _),
- [54] = PINGROUP(54, qup1_se2, qup1_se6, qdss_gpio_tracedata, gnss_adc1, atest_usb, ddr_pxi0, _, _, _, _, _),
- [55] = PINGROUP(55, qup1_se2, dp0_hot, qup1_se6, _, gnss_adc0, atest_usb, ddr_pxi0, _, _, _, _),
+ [52] = PINGROUP(52, qup1_se2_l0, pcie1_clk_req_n, qup1_se2_l2_mirb, ddr_bist_complete, qdss_gpio_tracedata, _, vsense_trigger_mirnat, _, _, _, _),
+ [53] = PINGROUP(53, qup1_se2_l1, qup1_se2_l3_mirb, gcc_gp1, ddr_bist_stop, _, qdss_gpio_tracedata, _, _, _, _, _),
+ [54] = PINGROUP(54, qup1_se2_l2_mira, qup1_se6_l1_mirb, qdss_gpio_tracedata, gnss_adc1, atest_usb, ddr_pxi0, _, _, _, _, _),
+ [55] = PINGROUP(55, qup1_se2_l3_mira, dp0_hot, qup1_se6_l3_mirb, _, gnss_adc0, atest_usb, ddr_pxi0, _, _, _, _),
[56] = PINGROUP(56, usb0_hs, tsense_pwm1, tsense_pwm2, tsense_pwm3, tsense_pwm4, _, _, _, _, _, _),
[57] = PINGROUP(57, sd_write_protect, _, _, _, _, _, _, _, _, _, _),
[58] = PINGROUP(58, _, _, _, _, _, _, _, _, _, _, _),
@@ -1364,10 +1502,10 @@ static const struct msm_pingroup eliza_groups[] = {
[75] = PINGROUP(75, cci_i2c_scl, _, phase_flag, _, _, _, _, _, _, _, _),
[76] = PINGROUP(76, cci_i2c_sda, cci_timer, prng_rosc2, _, phase_flag, _, _, _, _, _, _),
[77] = PINGROUP(77, cci_i2c_scl, jitter_bist, _, _, _, _, _, _, _, _, _),
- [78] = PINGROUP(78, qup1_se7, qup1_se7, _, phase_flag, _, _, _, _, _, _, _),
- [79] = PINGROUP(79, qspi0, mdp_vsync, qup2_se3, _, _, _, _, _, _, _, _),
- [80] = PINGROUP(80, pcie0_clk_req_n, qup1_se7, _, phase_flag, _, _, _, _, _, _, _),
- [81] = PINGROUP(81, wcn_sw_ctrl, qup1_se7, dbg_out_clk, _, _, _, _, _, _, _, _),
+ [78] = PINGROUP(78, qup1_se7_l3, qup1_se7_l0_mirb, _, phase_flag, _, _, _, _, _, _, _),
+ [79] = PINGROUP(79, qspi0, mdp_vsync, qup2_se3_l0_mira, _, _, _, _, _, _, _, _),
+ [80] = PINGROUP(80, pcie0_clk_req_n, qup1_se7_l1_mira, _, phase_flag, _, _, _, _, _, _, _),
+ [81] = PINGROUP(81, wcn_sw_ctrl, qup1_se7_l0_mira, dbg_out_clk, _, _, _, _, _, _, _, _),
[82] = PINGROUP(82, _, _, _, _, _, _, _, _, _, _, _),
[83] = PINGROUP(83, _, _, _, _, _, _, _, _, _, _, _),
[84] = PINGROUP(84, uim0_data, _, _, _, _, _, _, _, _, _, _),
@@ -1383,10 +1521,10 @@ static const struct msm_pingroup eliza_groups[] = {
[94] = PINGROUP(94, qlink_wmss, _, _, _, _, _, _, _, _, _, _),
[95] = PINGROUP(95, qlink_big_request, _, _, _, _, _, _, _, _, _, _),
[96] = PINGROUP(96, qlink_big_enable, _, _, _, _, _, _, _, _, _, _),
- [97] = PINGROUP(97, uim1_data, qspi0, qup2_se3, _, _, _, _, _, _, _, _),
+ [97] = PINGROUP(97, uim1_data, qspi0, qup2_se3_l1_mira, _, _, _, _, _, _, _, _),
[98] = PINGROUP(98, uim1_clk, qspi0, _, _, _, _, _, _, _, _, _),
[99] = PINGROUP(99, uim1_reset, qspi0, _, _, _, _, _, _, _, _, _),
- [100] = PINGROUP(100, uim1_present, qspi0, qup2_se3, coex_uart2_tx, qup2_se3, mdp_vsync, _, _, _, _, _),
+ [100] = PINGROUP(100, uim1_present, qspi0, qup2_se3_l2, coex_uart2_tx, qup2_se3_l1_mirb, mdp_vsync, _, _, _, _, _),
[101] = PINGROUP(101, _, _, _, _, _, _, _, _, _, _, _),
[102] = PINGROUP(102, _, _, _, _, _, _, _, _, _, _, _),
[103] = PINGROUP(103, _, _, _, _, _, _, _, _, _, _, _),
@@ -1400,9 +1538,9 @@ static const struct msm_pingroup eliza_groups[] = {
[111] = PINGROUP(111, coex_uart1_tx, _, _, _, _, _, _, _, _, _, _),
[112] = PINGROUP(112, coex_uart1_rx, _, _, _, _, _, _, _, _, _, _),
[113] = PINGROUP(113, _, nav_gpio3, _, _, _, _, _, _, _, _, _),
- [114] = PINGROUP(114, qup1_se7, qup1_se7, _, qdss_gpio_tracedata, _, _, _, _, _, _, _),
+ [114] = PINGROUP(114, qup1_se7_l2, qup1_se7_l1_mirb, _, qdss_gpio_tracedata, _, _, _, _, _, _, _),
[115] = PINGROUP(115, _, qspi0, cci_async_in, _, _, _, _, _, _, _, _),
- [116] = PINGROUP(116, qspi0, coex_uart2_rx, qup2_se3, qup2_se3, _, _, _, _, _, _, _),
+ [116] = PINGROUP(116, qspi0, coex_uart2_rx, qup2_se3_l3, qup2_se3_l0_mirb, _, _, _, _, _, _, _),
[117] = PINGROUP(117, nav_gpio1, _, vfr_1, _, _, _, _, _, _, _, _),
[118] = PINGROUP(118, nav_gpio2, _, _, _, _, _, _, _, _, _, _),
[119] = PINGROUP(119, nav_gpio0, _, _, _, _, _, _, _, _, _, _),
---
base-commit: c7275b05bc428c7373d97aa2da02d3a7fa6b9f66
change-id: 20260418-fix-eliza-pinctrl-b6e66dd92766
Best regards,
--
Alexander Koskovich <akoskovich@xxxxx>