* [PATCH v2 0/2] pinctrl: qcom: Add Eliza LPASS LPI support @ 2026-07-13 12:15 Ravi Hothi 2026-07-13 12:15 ` [PATCH v2 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl Ravi Hothi 2026-07-13 12:15 ` [PATCH v2 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM Ravi Hothi 0 siblings, 2 replies; 5+ messages in thread From: Ravi Hothi @ 2026-07-13 12:15 UTC (permalink / raw) To: Bjorn Andersson, Bartosz Golaszewski, Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Luca Weiss Cc: linux-arm-msm, linux-gpio, devicetree, linux-kernel, mohammad.rafi.shaik, ajay.nandam Eliza is a Qualcomm SoC that uses the same LPASS LPI pin mux functions as Milos. The key difference is the slew rate register layout — on Eliza the slew rate field lives in the same GPIO config register rather than a separate dedicated register. This series adds support for the Eliza LPASS LPI pin controller by extending the existing Milos driver with a new variant data struct that uses the correct slew offsets and sets LPI_FLAG_SLEW_RATE_SAME_REG. The pin descriptors and function table are shared with Milos since they are identical. Patch 1 updates the binding to document the new compatible and the single reg entry used by Eliza. Patch 2 adds the driver support. Changes in v2: - Use 'enum' instead of 'oneOf' + 'const' for compatible property (Reported-by: Rob Herring (Arm) <robh@kernel.org>, kernel test robot <lkp@intel.com>) - Restore 'items' descriptions for reg property, drop redundant maxItems (Reported-by: Sashiko AI review) - Link to v1: https://lore.kernel.org/all/20260703073029.2588960-1-ravi.hothi@oss.qualcomm.com/ Ravi Hothi (2): dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM .../pinctrl/qcom,milos-lpass-lpi-pinctrl.yaml | 18 ++++++++- .../pinctrl/qcom/pinctrl-milos-lpass-lpi.c | 40 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) base-commit: bee763d5f341b99cf472afeb508d4988f62a6ca1 -- 2.34.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl 2026-07-13 12:15 [PATCH v2 0/2] pinctrl: qcom: Add Eliza LPASS LPI support Ravi Hothi @ 2026-07-13 12:15 ` Ravi Hothi 2026-07-13 14:18 ` Bartosz Golaszewski 2026-07-13 12:15 ` [PATCH v2 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM Ravi Hothi 1 sibling, 1 reply; 5+ messages in thread From: Ravi Hothi @ 2026-07-13 12:15 UTC (permalink / raw) To: Bjorn Andersson, Bartosz Golaszewski, Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Luca Weiss Cc: linux-arm-msm, linux-gpio, devicetree, linux-kernel, mohammad.rafi.shaik, ajay.nandam, kernel test robot Document compatible for Qualcomm Eliza SoC LPASS LPI pin controller. Eliza has the same pin mux functions as Milos but uses a different slew rate register layout where the slew rate field is in the same GPIO config register rather than a separate dedicated register. As a result, Eliza only has a single reg entry instead of two. Signed-off-by: Ravi Hothi <ravi.hothi@oss.qualcomm.com> Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/r/202607032107.RMly13RH-lkp@intel.com/ --- .../pinctrl/qcom,milos-lpass-lpi-pinctrl.yaml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/pinctrl/qcom,milos-lpass-lpi-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/qcom,milos-lpass-lpi-pinctrl.yaml index 73e84f188591..c81cac1a9740 100644 --- a/Documentation/devicetree/bindings/pinctrl/qcom,milos-lpass-lpi-pinctrl.yaml +++ b/Documentation/devicetree/bindings/pinctrl/qcom,milos-lpass-lpi-pinctrl.yaml @@ -15,9 +15,12 @@ description: properties: compatible: - const: qcom,milos-lpass-lpi-pinctrl + enum: + - qcom,milos-lpass-lpi-pinctrl + - qcom,eliza-lpass-lpi-pinctrl reg: + minItems: 1 items: - description: LPASS LPI TLMM Control and Status registers - description: LPASS LPI MCC registers @@ -74,6 +77,19 @@ $defs: allOf: - $ref: qcom,lpass-lpi-common.yaml# + - if: + properties: + compatible: + const: qcom,eliza-lpass-lpi-pinctrl + then: + properties: + reg: + maxItems: 1 + else: + properties: + reg: + minItems: 2 + required: - compatible - reg -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl 2026-07-13 12:15 ` [PATCH v2 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl Ravi Hothi @ 2026-07-13 14:18 ` Bartosz Golaszewski 0 siblings, 0 replies; 5+ messages in thread From: Bartosz Golaszewski @ 2026-07-13 14:18 UTC (permalink / raw) To: Ravi Hothi Cc: linux-arm-msm, linux-gpio, devicetree, linux-kernel, mohammad.rafi.shaik, ajay.nandam, kernel test robot, Bjorn Andersson, Bartosz Golaszewski, Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Luca Weiss On Mon, 13 Jul 2026 14:15:17 +0200, Ravi Hothi <ravi.hothi@oss.qualcomm.com> said: > Document compatible for Qualcomm Eliza SoC LPASS LPI pin controller. > Eliza has the same pin mux functions as Milos but uses a different > slew rate register layout where the slew rate field is in the same > GPIO config register rather than a separate dedicated register. As a > result, Eliza only has a single reg entry instead of two. > > Signed-off-by: Ravi Hothi <ravi.hothi@oss.qualcomm.com> > Reported-by: kernel test robot <lkp@intel.com> > Closes: https://lore.kernel.org/r/202607032107.RMly13RH-lkp@intel.com/ That's misleading - the robot pointed out an issue in your v1. This patch doesn't fix an issue it found - it's a new feature. Don't send a v3 if not needed but I'll drop it when applying once we get an ack for this. Bart ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM 2026-07-13 12:15 [PATCH v2 0/2] pinctrl: qcom: Add Eliza LPASS LPI support Ravi Hothi 2026-07-13 12:15 ` [PATCH v2 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl Ravi Hothi @ 2026-07-13 12:15 ` Ravi Hothi 2026-07-13 12:29 ` sashiko-bot 1 sibling, 1 reply; 5+ messages in thread From: Ravi Hothi @ 2026-07-13 12:15 UTC (permalink / raw) To: Bjorn Andersson, Bartosz Golaszewski, Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Luca Weiss Cc: linux-arm-msm, linux-gpio, devicetree, linux-kernel, mohammad.rafi.shaik, ajay.nandam, Konrad Dybcio Eliza SoC has the same LPASS LPI pin mux functions as Milos but the slew rate control is in the same GPIO config register rather than a separate register. Add a new variant data struct with updated slew offsets and LPI_FLAG_SLEW_RATE_SAME_REG flag, reusing the existing pin descriptors and function table from Milos. Signed-off-by: Ravi Hothi <ravi.hothi@oss.qualcomm.com> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> --- .../pinctrl/qcom/pinctrl-milos-lpass-lpi.c | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c b/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c index 72b8ffd97860..cb4934cd6f75 100644 --- a/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c +++ b/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c @@ -148,6 +148,33 @@ static const struct lpi_pingroup milos_groups[] = { LPI_PINGROUP(22, LPI_NO_SLEW, i2s3_data, dmic4_data, ext_mclk1_e, _), }; +static const struct lpi_pingroup eliza_groups[] = { + LPI_PINGROUP(0, 11, swr_tx_clk, i2s0_clk, _, _), + LPI_PINGROUP(1, 11, swr_tx_data, i2s0_ws, _, _), + LPI_PINGROUP(2, 11, swr_tx_data, i2s0_data, _, _), + LPI_PINGROUP(3, 11, swr_rx_clk, i2s0_data, _, _), + LPI_PINGROUP(4, 11, swr_rx_data, i2s0_data, _, _), + LPI_PINGROUP(5, 11, swr_rx_data, ext_mclk1_c, i2s0_data, _), + LPI_PINGROUP(6, LPI_NO_SLEW, dmic1_clk, i2s1_clk, _, _), + LPI_PINGROUP(7, LPI_NO_SLEW, dmic1_data, i2s1_ws, _, _), + LPI_PINGROUP(8, LPI_NO_SLEW, dmic2_clk, i2s1_data, _, _), + LPI_PINGROUP(9, LPI_NO_SLEW, dmic2_data, i2s1_data, ext_mclk1_b, _), + LPI_PINGROUP(10, 11, wsa_swr_clk, i2s2_clk, _, _), + LPI_PINGROUP(11, 11, wsa_swr_data, i2s2_ws, _, _), + LPI_PINGROUP(12, LPI_NO_SLEW, dmic3_clk, i2s2_data, _, _), + LPI_PINGROUP(13, LPI_NO_SLEW, dmic3_data, i2s2_data, ext_mclk1_a, _), + LPI_PINGROUP(14, 11, swr_tx_data, ext_mclk1_d, _, _), + /* gpio15 - gpio18 do not really exist */ + LPI_PINGROUP(15, 11, _, _, _, _), + LPI_PINGROUP(16, 11, _, _, _, _), + LPI_PINGROUP(17, LPI_NO_SLEW, _, _, _, _), + LPI_PINGROUP(18, LPI_NO_SLEW, _, _, _, _), + LPI_PINGROUP(19, LPI_NO_SLEW, i2s3_clk, slimbus_clk, qca_swr_clk, _), + LPI_PINGROUP(20, LPI_NO_SLEW, i2s3_ws, slimbus_data, qca_swr_data, _), + LPI_PINGROUP(21, LPI_NO_SLEW, i2s3_data, dmic4_clk, _, _), + LPI_PINGROUP(22, LPI_NO_SLEW, i2s3_data, dmic4_data, ext_mclk1_e, _), +}; + static const struct lpi_function milos_functions[] = { LPI_FUNCTION(gpio), LPI_FUNCTION(dmic1_clk), @@ -196,8 +223,21 @@ static const struct lpi_pinctrl_variant_data milos_lpi_data = { .nfunctions = ARRAY_SIZE(milos_functions), }; +static const struct lpi_pinctrl_variant_data eliza_lpi_data = { + .pins = milos_lpi_pins, + .npins = ARRAY_SIZE(milos_lpi_pins), + .groups = eliza_groups, + .ngroups = ARRAY_SIZE(eliza_groups), + .functions = milos_functions, + .nfunctions = ARRAY_SIZE(milos_functions), + .flags = LPI_FLAG_SLEW_RATE_SAME_REG, +}; + static const struct of_device_id lpi_pinctrl_of_match[] = { { + .compatible = "qcom,eliza-lpass-lpi-pinctrl", + .data = &eliza_lpi_data, + }, { .compatible = "qcom,milos-lpass-lpi-pinctrl", .data = &milos_lpi_data, }, -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM 2026-07-13 12:15 ` [PATCH v2 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM Ravi Hothi @ 2026-07-13 12:29 ` sashiko-bot 0 siblings, 0 replies; 5+ messages in thread From: sashiko-bot @ 2026-07-13 12:29 UTC (permalink / raw) To: Ravi Hothi; +Cc: conor+dt, robh, devicetree Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: Pre-existing issues: - [High] Calling pinctrl configurations destructively overwrites unrelated pin state with default values. -- --- Patch [2]: [PATCH v2 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM --- commit 582da1f0b8240dfeb6e4051b30e4e3d9b11be196 Author: Ravi Hothi <ravi.hothi@oss.qualcomm.com> pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM This commit adds variant data for the Eliza SoC to the Milos LPASS LPI driver. It updates the slew offsets and adds the LPI_FLAG_SLEW_RATE_SAME_REG flag, reusing existing pin descriptors and function tables. > diff --git a/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c b/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c > --- a/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c > +++ b/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c [ ... ] > @@ -196,8 +223,21 @@ static const struct lpi_pinctrl_variant_data milos_lpi_data = { > .nfunctions = ARRAY_SIZE(milos_functions), > }; > > +static const struct lpi_pinctrl_variant_data eliza_lpi_data = { > + .pins = milos_lpi_pins, > + .npins = ARRAY_SIZE(milos_lpi_pins), > + .groups = eliza_groups, > + .ngroups = ARRAY_SIZE(eliza_groups), > + .functions = milos_functions, > + .nfunctions = ARRAY_SIZE(milos_functions), > + .flags = LPI_FLAG_SLEW_RATE_SAME_REG, > +}; > + [Severity: High] This is a pre-existing issue, but will adding these new pin groups trigger destructive overwrites in the core lpi_config_set()? When the pinctrl core or GPIO subsystem invokes lpi_config_set() to change a pin's configuration (like direction or value), it appears to destructively overwrite orthogonal pin states with default values. In drivers/pinctrl/qcom/pinctrl-lpass-lpi.c:lpi_config_set(), the local variables are initialized to default values: unsigned int param, arg, pullup = LPI_GPIO_BIAS_DISABLE, strength = 2; bool value, output_enabled = false; After processing the requested configs, the function reads the current register but unconditionally overwrites these fields: lpi_gpio_read_reg(pctrl, group, LPI_GPIO_CFG_REG, &val); u32p_replace_bits(&val, pullup, LPI_GPIO_PULL_MASK); u32p_replace_bits(&val, LPI_GPIO_DS_TO_VAL(strength), LPI_GPIO_OUT_STRENGTH_MASK); u32p_replace_bits(&val, output_enabled, LPI_GPIO_OE_MASK); Does this mean merely setting a GPIO output value will reset its drive strength to 2mA and disable any pull bias? Similarly, would applying a pull bias on an output pin inadvertently clear LPI_GPIO_OE_MASK and convert it into an input? > static const struct of_device_id lpi_pinctrl_of_match[] = { > { > + .compatible = "qcom,eliza-lpass-lpi-pinctrl", > + .data = &eliza_lpi_data, > + }, { > .compatible = "qcom,milos-lpass-lpi-pinctrl", > .data = &milos_lpi_data, > }, -- Sashiko AI review · https://sashiko.dev/#/patchset/20260713121518.2724474-1-ravi.hothi@oss.qualcomm.com?part=2 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-07-13 14:18 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-07-13 12:15 [PATCH v2 0/2] pinctrl: qcom: Add Eliza LPASS LPI support Ravi Hothi 2026-07-13 12:15 ` [PATCH v2 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl Ravi Hothi 2026-07-13 14:18 ` Bartosz Golaszewski 2026-07-13 12:15 ` [PATCH v2 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM Ravi Hothi 2026-07-13 12:29 ` sashiko-bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox