* [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
* [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
* 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
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