* [PATCH v4 2/7] pinctrl: scmi: Add SCMI_PIN_INPUT_VALUE
2026-03-17 14:40 [PATCH v4 0/7] gpio: add pinctrl based generic gpio driver Dan Carpenter
@ 2026-03-17 14:40 ` Dan Carpenter
2026-03-17 15:38 ` Andy Shevchenko
2026-03-17 14:40 ` [PATCH v4 3/7] pinctrl: Delete PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS support Dan Carpenter
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Dan Carpenter @ 2026-03-17 14:40 UTC (permalink / raw)
To: Sudeep Holla, AKASHI Takahiro
Cc: Cristian Marussi, Linus Walleij, arm-scmi, linux-arm-kernel,
linux-gpio, linux-kernel, Andy Shevchenko, Bartosz Golaszewski,
Vincent Guittot, Khaled Ali Ahmed, Michal Simek
The PIN_CONFIG_LEVEL parameter represents the value of the pin, whether
reading or writing to the pin. In SCMI, the parameter is represented by
two different values SCMI_PIN_OUTPUT_VALUE for writing to a pin and
SCMI_PIN_INPUT_VALUE for reading. The current code translates
PIN_CONFIG_LEVEL as SCMI_PIN_OUTPUT_VALUE (writing).
Add a function to translate it to either INPUT or OUTPUT depending on
whether it is called from a _get or _set() operation.
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Acked-by: Sudeep Holla <sudeep.holla@kernel.org>
---
drivers/pinctrl/pinctrl-scmi.c | 33 ++++++++++++++++++++++++++-------
1 file changed, 26 insertions(+), 7 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c
index f4f296e07be5..5d347e6b2e4c 100644
--- a/drivers/pinctrl/pinctrl-scmi.c
+++ b/drivers/pinctrl/pinctrl-scmi.c
@@ -251,9 +251,6 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_config_param param,
case PIN_CONFIG_MODE_LOW_POWER:
*type = SCMI_PIN_LOW_POWER_MODE;
break;
- case PIN_CONFIG_LEVEL:
- *type = SCMI_PIN_OUTPUT_VALUE;
- break;
case PIN_CONFIG_OUTPUT_ENABLE:
*type = SCMI_PIN_OUTPUT_MODE;
break;
@@ -276,6 +273,28 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_config_param param,
return 0;
}
+static int pinctrl_scmi_map_pinconf_type_get(enum pin_config_param param,
+ enum scmi_pinctrl_conf_type *type)
+{
+ if (param == PIN_CONFIG_LEVEL) {
+ *type = SCMI_PIN_INPUT_VALUE;
+ return 0;
+ }
+
+ return pinctrl_scmi_map_pinconf_type(param, type);
+}
+
+static int pinctrl_scmi_map_pinconf_type_set(enum pin_config_param param,
+ enum scmi_pinctrl_conf_type *type)
+{
+ if (param == PIN_CONFIG_LEVEL) {
+ *type = SCMI_PIN_OUTPUT_VALUE;
+ return 0;
+ }
+
+ return pinctrl_scmi_map_pinconf_type(param, type);
+}
+
static int pinctrl_scmi_pinconf_get(struct pinctrl_dev *pctldev,
unsigned int pin, unsigned long *config)
{
@@ -290,7 +309,7 @@ static int pinctrl_scmi_pinconf_get(struct pinctrl_dev *pctldev,
config_type = pinconf_to_config_param(*config);
- ret = pinctrl_scmi_map_pinconf_type(config_type, &type);
+ ret = pinctrl_scmi_map_pinconf_type_get(config_type, &type);
if (ret)
return ret;
@@ -363,7 +382,7 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,
for (i = 0; i < num_configs; i++) {
param = pinconf_to_config_param(configs[i]);
- ret = pinctrl_scmi_map_pinconf_type(param, &p_config_type[i]);
+ ret = pinctrl_scmi_map_pinconf_type_set(param, &p_config_type[i]);
if (ret) {
dev_err(pmx->dev, "Error map pinconf_type %d\n", ret);
goto free_config;
@@ -405,7 +424,7 @@ static int pinctrl_scmi_pinconf_group_set(struct pinctrl_dev *pctldev,
for (i = 0; i < num_configs; i++) {
param = pinconf_to_config_param(configs[i]);
- ret = pinctrl_scmi_map_pinconf_type(param, &p_config_type[i]);
+ ret = pinctrl_scmi_map_pinconf_type_set(param, &p_config_type[i]);
if (ret) {
dev_err(pmx->dev, "Error map pinconf_type %d\n", ret);
goto free_config;
@@ -440,7 +459,7 @@ static int pinctrl_scmi_pinconf_group_get(struct pinctrl_dev *pctldev,
return -EINVAL;
config_type = pinconf_to_config_param(*config);
- ret = pinctrl_scmi_map_pinconf_type(config_type, &type);
+ ret = pinctrl_scmi_map_pinconf_type_get(config_type, &type);
if (ret) {
dev_err(pmx->dev, "Error map pinconf_type %d\n", ret);
return ret;
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v4 2/7] pinctrl: scmi: Add SCMI_PIN_INPUT_VALUE
2026-03-17 14:40 ` [PATCH v4 2/7] pinctrl: scmi: Add SCMI_PIN_INPUT_VALUE Dan Carpenter
@ 2026-03-17 15:38 ` Andy Shevchenko
2026-03-18 7:19 ` Dan Carpenter
0 siblings, 1 reply; 8+ messages in thread
From: Andy Shevchenko @ 2026-03-17 15:38 UTC (permalink / raw)
To: Dan Carpenter
Cc: Sudeep Holla, AKASHI Takahiro, Cristian Marussi, Linus Walleij,
arm-scmi, linux-arm-kernel, linux-gpio, linux-kernel,
Bartosz Golaszewski, Vincent Guittot, Khaled Ali Ahmed,
Michal Simek
On Tue, Mar 17, 2026 at 05:40:27PM +0300, Dan Carpenter wrote:
> The PIN_CONFIG_LEVEL parameter represents the value of the pin, whether
> reading or writing to the pin. In SCMI, the parameter is represented by
> two different values SCMI_PIN_OUTPUT_VALUE for writing to a pin and
> SCMI_PIN_INPUT_VALUE for reading. The current code translates
> PIN_CONFIG_LEVEL as SCMI_PIN_OUTPUT_VALUE (writing).
>
> Add a function to translate it to either INPUT or OUTPUT depending on
> whether it is called from a _get or _set() operation.
In three consecutive patches against the same file you have three (!) different
prefixes. Please, align with what is being used most in the driver and/or subsystem
(the driver seems has no consensus with itself, so subsystem then, something like
"pinctrl: scmi: ").
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 2/7] pinctrl: scmi: Add SCMI_PIN_INPUT_VALUE
2026-03-17 15:38 ` Andy Shevchenko
@ 2026-03-18 7:19 ` Dan Carpenter
0 siblings, 0 replies; 8+ messages in thread
From: Dan Carpenter @ 2026-03-18 7:19 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Sudeep Holla, AKASHI Takahiro, Cristian Marussi, Linus Walleij,
arm-scmi, linux-arm-kernel, linux-gpio, linux-kernel,
Bartosz Golaszewski, Vincent Guittot, Khaled Ali Ahmed,
Michal Simek
On Tue, Mar 17, 2026 at 05:38:36PM +0200, Andy Shevchenko wrote:
> On Tue, Mar 17, 2026 at 05:40:27PM +0300, Dan Carpenter wrote:
> > The PIN_CONFIG_LEVEL parameter represents the value of the pin, whether
> > reading or writing to the pin. In SCMI, the parameter is represented by
> > two different values SCMI_PIN_OUTPUT_VALUE for writing to a pin and
> > SCMI_PIN_INPUT_VALUE for reading. The current code translates
> > PIN_CONFIG_LEVEL as SCMI_PIN_OUTPUT_VALUE (writing).
> >
> > Add a function to translate it to either INPUT or OUTPUT depending on
> > whether it is called from a _get or _set() operation.
>
> In three consecutive patches against the same file you have three (!) different
> prefixes. Please, align with what is being used most in the driver and/or subsystem
> (the driver seems has no consensus with itself, so subsystem then, something like
> "pinctrl: scmi: ").
Oops. Crud. You're right.
regards,
dan carpenter
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 3/7] pinctrl: Delete PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS support
2026-03-17 14:40 [PATCH v4 0/7] gpio: add pinctrl based generic gpio driver Dan Carpenter
2026-03-17 14:40 ` [PATCH v4 2/7] pinctrl: scmi: Add SCMI_PIN_INPUT_VALUE Dan Carpenter
@ 2026-03-17 14:40 ` Dan Carpenter
2026-03-17 14:40 ` [PATCH v4 4/7] pinctrl-scmi: ignore PIN_CONFIG_PERSIST_STATE Dan Carpenter
2026-03-17 14:40 ` [PATCH v4 5/7] arm_scmi: pinctrl: allow PINCTRL_REQUEST to return EOPNOTSUPP Dan Carpenter
3 siblings, 0 replies; 8+ messages in thread
From: Dan Carpenter @ 2026-03-17 14:40 UTC (permalink / raw)
To: Sudeep Holla, AKASHI Takahiro
Cc: Cristian Marussi, Linus Walleij, arm-scmi, linux-arm-kernel,
linux-gpio, linux-kernel, Andy Shevchenko, Bartosz Golaszewski,
Vincent Guittot, Khaled Ali Ahmed, Michal Simek
The argument for PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS is supposed to
be expressed in terms of ohms. But the pinctrl-scmi driver was
implementing it the same as PIN_CONFIG_OUTPUT and writing either a
zero or one to the pin.
The SCMI protocol doesn't have an support configuration type so just
delete this code instead of replacing it.
Cc: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Linus Walleij <linusw@kernel.org>
---
drivers/pinctrl/pinctrl-scmi.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c
index 5d347e6b2e4c..de8c113bc61d 100644
--- a/drivers/pinctrl/pinctrl-scmi.c
+++ b/drivers/pinctrl/pinctrl-scmi.c
@@ -254,9 +254,6 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_config_param param,
case PIN_CONFIG_OUTPUT_ENABLE:
*type = SCMI_PIN_OUTPUT_MODE;
break;
- case PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS:
- *type = SCMI_PIN_OUTPUT_VALUE;
- break;
case PIN_CONFIG_POWER_SOURCE:
*type = SCMI_PIN_POWER_SOURCE;
break;
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 4/7] pinctrl-scmi: ignore PIN_CONFIG_PERSIST_STATE
2026-03-17 14:40 [PATCH v4 0/7] gpio: add pinctrl based generic gpio driver Dan Carpenter
2026-03-17 14:40 ` [PATCH v4 2/7] pinctrl: scmi: Add SCMI_PIN_INPUT_VALUE Dan Carpenter
2026-03-17 14:40 ` [PATCH v4 3/7] pinctrl: Delete PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS support Dan Carpenter
@ 2026-03-17 14:40 ` Dan Carpenter
2026-03-17 14:40 ` [PATCH v4 5/7] arm_scmi: pinctrl: allow PINCTRL_REQUEST to return EOPNOTSUPP Dan Carpenter
3 siblings, 0 replies; 8+ messages in thread
From: Dan Carpenter @ 2026-03-17 14:40 UTC (permalink / raw)
To: Sudeep Holla, AKASHI Takahiro
Cc: Cristian Marussi, Linus Walleij, arm-scmi, linux-arm-kernel,
linux-gpio, linux-kernel, Andy Shevchenko, Bartosz Golaszewski,
Vincent Guittot, Khaled Ali Ahmed, Michal Simek
The PIN_CONFIG_PERSIST_STATE setting ensures that the pin state persists
across a sleep or controller reset. The SCMI spec does not have an
equivalent command to this so just ignore it.
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Linus Walleij <linusw@kernel.org>
---
drivers/pinctrl/pinctrl-scmi.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c
index de8c113bc61d..f22be6b7b82a 100644
--- a/drivers/pinctrl/pinctrl-scmi.c
+++ b/drivers/pinctrl/pinctrl-scmi.c
@@ -361,7 +361,7 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,
unsigned long *configs,
unsigned int num_configs)
{
- int i, ret;
+ int i, cnt, ret;
struct scmi_pinctrl *pmx = pinctrl_dev_get_drvdata(pctldev);
enum scmi_pinctrl_conf_type config_type[SCMI_NUM_CONFIGS];
u32 config_value[SCMI_NUM_CONFIGS];
@@ -377,17 +377,21 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,
if (ret)
return ret;
+ cnt = 0;
for (i = 0; i < num_configs; i++) {
param = pinconf_to_config_param(configs[i]);
- ret = pinctrl_scmi_map_pinconf_type_set(param, &p_config_type[i]);
+ if (param == PIN_CONFIG_PERSIST_STATE)
+ continue;
+ ret = pinctrl_scmi_map_pinconf_type_set(param, &p_config_type[cnt]);
if (ret) {
dev_err(pmx->dev, "Error map pinconf_type %d\n", ret);
goto free_config;
}
- p_config_value[i] = pinconf_to_config_argument(configs[i]);
+ p_config_value[cnt] = pinconf_to_config_argument(configs[i]);
+ cnt++;
}
- ret = pinctrl_ops->settings_conf(pmx->ph, pin, PIN_TYPE, num_configs,
+ ret = pinctrl_ops->settings_conf(pmx->ph, pin, PIN_TYPE, cnt,
p_config_type, p_config_value);
if (ret)
dev_err(pmx->dev, "Error parsing config %d\n", ret);
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v4 5/7] arm_scmi: pinctrl: allow PINCTRL_REQUEST to return EOPNOTSUPP
2026-03-17 14:40 [PATCH v4 0/7] gpio: add pinctrl based generic gpio driver Dan Carpenter
` (2 preceding siblings ...)
2026-03-17 14:40 ` [PATCH v4 4/7] pinctrl-scmi: ignore PIN_CONFIG_PERSIST_STATE Dan Carpenter
@ 2026-03-17 14:40 ` Dan Carpenter
2026-03-18 11:07 ` Cristian Marussi
3 siblings, 1 reply; 8+ messages in thread
From: Dan Carpenter @ 2026-03-17 14:40 UTC (permalink / raw)
To: Sudeep Holla, AKASHI Takahiro
Cc: Cristian Marussi, arm-scmi, linux-arm-kernel, linux-kernel,
Andy Shevchenko, Linus Walleij, Bartosz Golaszewski, linux-gpio,
Vincent Guittot, Khaled Ali Ahmed, Michal Simek
The SCMI protocol specification says that the PINCTRL_REQUEST and
PINCTRL_RELEASE commands are optional. So if the SCMI server returns
-EOPNOTSUPP, then treat that as success and continue.
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Reviewed-by: Sudeep Holla <sudeep.holla@kernel.org>
---
drivers/firmware/arm_scmi/pinctrl.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/firmware/arm_scmi/pinctrl.c b/drivers/firmware/arm_scmi/pinctrl.c
index a020e23d7c49..42cb1aef1fe1 100644
--- a/drivers/firmware/arm_scmi/pinctrl.c
+++ b/drivers/firmware/arm_scmi/pinctrl.c
@@ -578,6 +578,8 @@ static int scmi_pinctrl_request_free(const struct scmi_protocol_handle *ph,
tx->flags = cpu_to_le32(type);
ret = ph->xops->do_xfer(ph, t);
+ if (ret == -EOPNOTSUPP)
+ ret = 0;
ph->xops->xfer_put(ph, t);
return ret;
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v4 5/7] arm_scmi: pinctrl: allow PINCTRL_REQUEST to return EOPNOTSUPP
2026-03-17 14:40 ` [PATCH v4 5/7] arm_scmi: pinctrl: allow PINCTRL_REQUEST to return EOPNOTSUPP Dan Carpenter
@ 2026-03-18 11:07 ` Cristian Marussi
0 siblings, 0 replies; 8+ messages in thread
From: Cristian Marussi @ 2026-03-18 11:07 UTC (permalink / raw)
To: Dan Carpenter
Cc: Sudeep Holla, AKASHI Takahiro, Cristian Marussi, arm-scmi,
linux-arm-kernel, linux-kernel, Andy Shevchenko, Linus Walleij,
Bartosz Golaszewski, linux-gpio, Vincent Guittot,
Khaled Ali Ahmed, Michal Simek
On Tue, Mar 17, 2026 at 05:40:50PM +0300, Dan Carpenter wrote:
> The SCMI protocol specification says that the PINCTRL_REQUEST and
> PINCTRL_RELEASE commands are optional. So if the SCMI server returns
> -EOPNOTSUPP, then treat that as success and continue.
Hi
a nitpick, this should be
firmware: arm_scmi: Allow PINCTRL_REQUEST to return EOPNOTSUPP
Thanks,
Cristian
>
> Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
> Reviewed-by: Linus Walleij <linusw@kernel.org>
> Reviewed-by: Sudeep Holla <sudeep.holla@kernel.org>
> ---
> drivers/firmware/arm_scmi/pinctrl.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/firmware/arm_scmi/pinctrl.c b/drivers/firmware/arm_scmi/pinctrl.c
> index a020e23d7c49..42cb1aef1fe1 100644
> --- a/drivers/firmware/arm_scmi/pinctrl.c
> +++ b/drivers/firmware/arm_scmi/pinctrl.c
> @@ -578,6 +578,8 @@ static int scmi_pinctrl_request_free(const struct scmi_protocol_handle *ph,
> tx->flags = cpu_to_le32(type);
>
> ret = ph->xops->do_xfer(ph, t);
> + if (ret == -EOPNOTSUPP)
> + ret = 0;
> ph->xops->xfer_put(ph, t);
>
> return ret;
> --
> 2.51.0
>
^ permalink raw reply [flat|nested] 8+ messages in thread