[PATCH 10/11] firmware: arm_scmi: add an operation to set the function of a single pin
From: Clément Le Goffic
Date: Fri Oct 30 2026 - 11:59:29 EST
Add pin_mux_set, which selects a function on a single pin. mux_set only
works on groups.
Signed-off-by: Clément Le Goffic <clegoffic@xxxxxxxxxxxx>
---
drivers/firmware/arm_scmi/pinctrl.c | 7 +++++++
include/linux/scmi_protocol.h | 3 +++
2 files changed, 10 insertions(+)
diff --git a/drivers/firmware/arm_scmi/pinctrl.c b/drivers/firmware/arm_scmi/pinctrl.c
index ba602242754c..27b9a38ede74 100644
--- a/drivers/firmware/arm_scmi/pinctrl.c
+++ b/drivers/firmware/arm_scmi/pinctrl.c
@@ -802,6 +802,12 @@ static int scmi_pinctrl_mux_set(const struct scmi_protocol_handle *ph,
return scmi_pinctrl_function_select(ph, group, GROUP_TYPE, selector);
}
+static int scmi_pinctrl_pin_mux_set(const struct scmi_protocol_handle *ph,
+ u32 selector, u32 pin)
+{
+ return scmi_pinctrl_function_select(ph, pin, PIN_TYPE, selector);
+}
+
static int scmi_pinctrl_get_pin_info(const struct scmi_protocol_handle *ph,
u32 selector)
{
@@ -867,6 +873,7 @@ static const struct scmi_pinctrl_proto_ops pinctrl_proto_ops = {
.function_groups_get = scmi_pinctrl_function_groups_get,
.function_flags_get = scmi_pinctrl_function_flags_get,
.mux_set = scmi_pinctrl_mux_set,
+ .pin_mux_set = scmi_pinctrl_pin_mux_set,
.settings_get_one = scmi_pinctrl_settings_get_one,
.settings_get_all = scmi_pinctrl_settings_get_all,
.settings_conf = scmi_pinctrl_settings_conf,
diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h
index 072190e89064..736d34968f42 100644
--- a/include/linux/scmi_protocol.h
+++ b/include/linux/scmi_protocol.h
@@ -789,6 +789,7 @@ enum scmi_pinctrl_conf_type {
* @function_flags_get: tells whether the specified function is pin-only and
* whether it is a GPIO function
* @mux_set: set muxing function for groups of pins
+ * @pin_mux_set: set muxing function for a single pin
* @settings_get_one: returns one configuration parameter for pin or group
* specified by config_type
* @settings_get_all: returns all configuration parameters for pin or group
@@ -812,6 +813,8 @@ struct scmi_pinctrl_proto_ops {
u32 selector, bool *pin_only, bool *gpio);
int (*mux_set)(const struct scmi_protocol_handle *ph, u32 selector,
u32 group);
+ int (*pin_mux_set)(const struct scmi_protocol_handle *ph, u32 selector,
+ u32 pin);
int (*settings_get_one)(const struct scmi_protocol_handle *ph,
u32 selector,
enum scmi_pinctrl_selector_type type,
--
2.56.0