* [PATCH v3 0/2] pinctrl: qcom: Add Eliza LPASS LPI support @ 2026-07-15 13:21 Ravi Hothi 2026-07-15 13:21 ` [PATCH v3 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl Ravi Hothi 2026-07-15 13:21 ` [PATCH v3 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-15 13:21 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 v3: - Fix enum compatible list to alphabetical order (qcom,eliza before qcom,milos) (Suggested-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>) - Drop incorrect Reported-by/Closes tags - Link to v2: https://lore.kernel.org/all/20260713121518.2724474-1-ravi.hothi@oss.qualcomm.com/ 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: cc2b5f627e8ccbae1188ef2d8be3e451d7f933a5 -- 2.34.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl 2026-07-15 13:21 [PATCH v3 0/2] pinctrl: qcom: Add Eliza LPASS LPI support Ravi Hothi @ 2026-07-15 13:21 ` Ravi Hothi 2026-07-15 13:35 ` sashiko-bot 2026-07-15 13:21 ` [PATCH v3 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-15 13:21 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, Krzysztof Kozlowski 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> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.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..86c1da0f577c 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,eliza-lpass-lpi-pinctrl + - qcom,milos-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 v3 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl 2026-07-15 13:21 ` [PATCH v3 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl Ravi Hothi @ 2026-07-15 13:35 ` sashiko-bot 0 siblings, 0 replies; 5+ messages in thread From: sashiko-bot @ 2026-07-15 13:35 UTC (permalink / raw) To: Ravi Hothi; +Cc: robh, devicetree, conor+dt Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] Schema validation failure for Eliza compatible string due to scalar `const` comparison against an array. -- --- Patch [1]: [PATCH v3 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl --- commit 8578b655d5c47b4337e1837fe83f459a7fed7346 Author: Ravi Hothi <ravi.hothi@oss.qualcomm.com> dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl This commit documents the compatible string for the Qualcomm Eliza SoC LPASS LPI pin controller. It also updates the schema to reflect that Eliza only has a single reg entry because it uses a different slew rate register layout. > 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 73e84f1885911..86c1da0f577c9 100644 > --- a/Documentation/devicetree/bindings/pinctrl/qcom,milos-lpass-lpi-pinctrl.yaml > +++ b/Documentation/devicetree/bindings/pinctrl/qcom,milos-lpass-lpi-pinctrl.yaml [ ... ] > @@ -74,6 +77,19 @@ $defs: > allOf: > - $ref: qcom,lpass-lpi-common.yaml# > > + - if: > + properties: > + compatible: > + const: qcom,eliza-lpass-lpi-pinctrl [Severity: Medium] Since the compatible property is evaluated as an array in device tree schemas, will this scalar const comparison always evaluate to false? It appears this would cause the validation tool to incorrectly take the else branch, enforcing minItems: 2 on the reg property even for valid Eliza device trees. Should this be using contains: const: instead to correctly match the array? > + then: > + properties: > + reg: > + maxItems: 1 > + else: > + properties: > + reg: > + minItems: 2 -- Sashiko AI review · https://sashiko.dev/#/patchset/20260715132150.1322663-1-ravi.hothi@oss.qualcomm.com?part=1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM 2026-07-15 13:21 [PATCH v3 0/2] pinctrl: qcom: Add Eliza LPASS LPI support Ravi Hothi 2026-07-15 13:21 ` [PATCH v3 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl Ravi Hothi @ 2026-07-15 13:21 ` Ravi Hothi 2026-07-15 13:30 ` sashiko-bot 1 sibling, 1 reply; 5+ messages in thread From: Ravi Hothi @ 2026-07-15 13:21 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 v3 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM 2026-07-15 13:21 ` [PATCH v3 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM Ravi Hothi @ 2026-07-15 13:30 ` sashiko-bot 0 siblings, 0 replies; 5+ messages in thread From: sashiko-bot @ 2026-07-15 13:30 UTC (permalink / raw) To: Ravi Hothi; +Cc: robh, conor+dt, devicetree Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: Pre-existing issues: - [High] This problem wasn't introduced by this patch, but lpi_config_set() unconditionally overwrites unspecified pin configuration parameters (such as pull bias, drive strength, and output enable) with default values, rather than preserving the existing register state. This breaks the pinconf API contract, especially when changing a single parameter dynamically. -- --- Patch [2]: [PATCH v3 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM --- commit 0b7a3c2b301461d37d7084e97a33317743f82c3e Author: Ravi Hothi <ravi.hothi@oss.qualcomm.com> pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM 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. > diff --git a/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c b/drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c > index 72b8ffd97860b..cb4934cd6f757 100644 > --- 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 isn't a bug introduced by this patch, but since Eliza will use the shared LPASS LPI infrastructure, does the core lpi_config_set() function overwrite unspecified pin configuration parameters? Looking at drivers/pinctrl/qcom/pinctrl-lpass-lpi.c:lpi_config_set(), variables are initialized to defaults instead of the current hardware state: unsigned int param, arg, pullup = LPI_GPIO_BIAS_DISABLE, strength = 2; bool value, output_enabled = false; After parsing explicitly provided configs, these defaults are unconditionally written back to the register: 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); lpi_gpio_write_reg(pctrl, group, LPI_GPIO_CFG_REG, val); Will this cause a partial pinconf update (or a dynamic change to a single GPIO property) to wipe out the pin's existing drive strength and pull-up/down bias, potentially breaking audio interface signaling constraints? > static const struct of_device_id lpi_pinctrl_of_match[] = { > { > + .compatible = "qcom,eliza-lpass-lpi-pinctrl", > + .data = &eliza_lpi_data, > + }, { -- Sashiko AI review · https://sashiko.dev/#/patchset/20260715132150.1322663-1-ravi.hothi@oss.qualcomm.com?part=2 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-07-15 13:35 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-07-15 13:21 [PATCH v3 0/2] pinctrl: qcom: Add Eliza LPASS LPI support Ravi Hothi 2026-07-15 13:21 ` [PATCH v3 1/2] dt-bindings: pinctrl: qcom,milos-lpass-lpi-pinctrl: Add Eliza pinctrl Ravi Hothi 2026-07-15 13:35 ` sashiko-bot 2026-07-15 13:21 ` [PATCH v3 2/2] pinctrl: qcom: milos-lpass-lpi: Add Eliza LPASS LPI TLMM Ravi Hothi 2026-07-15 13:30 ` sashiko-bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox