Skip to content

Commit 9ea2647

Browse files
Dan Carpenterlinusw
authored andcommitted
pinctrl: scmi: Add SCMI_PIN_INPUT_VALUE
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> Signed-off-by: Linus Walleij <linusw@kernel.org>
1 parent 96b76f7 commit 9ea2647

1 file changed

Lines changed: 26 additions & 7 deletions

File tree

drivers/pinctrl/pinctrl-scmi.c

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,6 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_config_param param,
251251
case PIN_CONFIG_MODE_LOW_POWER:
252252
*type = SCMI_PIN_LOW_POWER_MODE;
253253
break;
254-
case PIN_CONFIG_LEVEL:
255-
*type = SCMI_PIN_OUTPUT_VALUE;
256-
break;
257254
case PIN_CONFIG_OUTPUT_ENABLE:
258255
*type = SCMI_PIN_OUTPUT_MODE;
259256
break;
@@ -276,6 +273,28 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_config_param param,
276273
return 0;
277274
}
278275

276+
static int pinctrl_scmi_map_pinconf_type_get(enum pin_config_param param,
277+
enum scmi_pinctrl_conf_type *type)
278+
{
279+
if (param == PIN_CONFIG_LEVEL) {
280+
*type = SCMI_PIN_INPUT_VALUE;
281+
return 0;
282+
}
283+
284+
return pinctrl_scmi_map_pinconf_type(param, type);
285+
}
286+
287+
static int pinctrl_scmi_map_pinconf_type_set(enum pin_config_param param,
288+
enum scmi_pinctrl_conf_type *type)
289+
{
290+
if (param == PIN_CONFIG_LEVEL) {
291+
*type = SCMI_PIN_OUTPUT_VALUE;
292+
return 0;
293+
}
294+
295+
return pinctrl_scmi_map_pinconf_type(param, type);
296+
}
297+
279298
static int pinctrl_scmi_pinconf_get(struct pinctrl_dev *pctldev,
280299
unsigned int pin, unsigned long *config)
281300
{
@@ -290,7 +309,7 @@ static int pinctrl_scmi_pinconf_get(struct pinctrl_dev *pctldev,
290309

291310
config_type = pinconf_to_config_param(*config);
292311

293-
ret = pinctrl_scmi_map_pinconf_type(config_type, &type);
312+
ret = pinctrl_scmi_map_pinconf_type_get(config_type, &type);
294313
if (ret)
295314
return ret;
296315

@@ -363,7 +382,7 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,
363382

364383
for (i = 0; i < num_configs; i++) {
365384
param = pinconf_to_config_param(configs[i]);
366-
ret = pinctrl_scmi_map_pinconf_type(param, &p_config_type[i]);
385+
ret = pinctrl_scmi_map_pinconf_type_set(param, &p_config_type[i]);
367386
if (ret) {
368387
dev_err(pmx->dev, "Error map pinconf_type %d\n", ret);
369388
goto free_config;
@@ -405,7 +424,7 @@ static int pinctrl_scmi_pinconf_group_set(struct pinctrl_dev *pctldev,
405424

406425
for (i = 0; i < num_configs; i++) {
407426
param = pinconf_to_config_param(configs[i]);
408-
ret = pinctrl_scmi_map_pinconf_type(param, &p_config_type[i]);
427+
ret = pinctrl_scmi_map_pinconf_type_set(param, &p_config_type[i]);
409428
if (ret) {
410429
dev_err(pmx->dev, "Error map pinconf_type %d\n", ret);
411430
goto free_config;
@@ -440,7 +459,7 @@ static int pinctrl_scmi_pinconf_group_get(struct pinctrl_dev *pctldev,
440459
return -EINVAL;
441460

442461
config_type = pinconf_to_config_param(*config);
443-
ret = pinctrl_scmi_map_pinconf_type(config_type, &type);
462+
ret = pinctrl_scmi_map_pinconf_type_get(config_type, &type);
444463
if (ret) {
445464
dev_err(pmx->dev, "Error map pinconf_type %d\n", ret);
446465
return ret;

0 commit comments

Comments
 (0)