]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
pinctrl: scmi: ignore PIN_CONFIG_PERSIST_STATE
authorDan Carpenter <dan.carpenter@linaro.org>
Mon, 23 Mar 2026 19:01:22 +0000 (22:01 +0300)
committerLinus Walleij <linusw@kernel.org>
Tue, 24 Mar 2026 12:50:30 +0000 (13:50 +0100)
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>
Signed-off-by: Linus Walleij <linusw@kernel.org>
drivers/pinctrl/pinctrl-scmi.c

index de8c113bc61d148fd21288df9af5bc89631e3015..f22be6b7b82a41a6ee7ee8660e6d857ba9d23aac 100644 (file)
@@ -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);