@@ -251,15 +251,9 @@ 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 ;
260- case PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS :
261- * type = SCMI_PIN_OUTPUT_VALUE ;
262- break ;
263257 case PIN_CONFIG_POWER_SOURCE :
264258 * type = SCMI_PIN_POWER_SOURCE ;
265259 break ;
@@ -276,6 +270,28 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_config_param param,
276270 return 0 ;
277271}
278272
273+ static int pinctrl_scmi_map_pinconf_type_get (enum pin_config_param param ,
274+ enum scmi_pinctrl_conf_type * type )
275+ {
276+ if (param == PIN_CONFIG_LEVEL ) {
277+ * type = SCMI_PIN_INPUT_VALUE ;
278+ return 0 ;
279+ }
280+
281+ return pinctrl_scmi_map_pinconf_type (param , type );
282+ }
283+
284+ static int pinctrl_scmi_map_pinconf_type_set (enum pin_config_param param ,
285+ enum scmi_pinctrl_conf_type * type )
286+ {
287+ if (param == PIN_CONFIG_LEVEL ) {
288+ * type = SCMI_PIN_OUTPUT_VALUE ;
289+ return 0 ;
290+ }
291+
292+ return pinctrl_scmi_map_pinconf_type (param , type );
293+ }
294+
279295static int pinctrl_scmi_pinconf_get (struct pinctrl_dev * pctldev ,
280296 unsigned int pin , unsigned long * config )
281297{
@@ -290,7 +306,7 @@ static int pinctrl_scmi_pinconf_get(struct pinctrl_dev *pctldev,
290306
291307 config_type = pinconf_to_config_param (* config );
292308
293- ret = pinctrl_scmi_map_pinconf_type (config_type , & type );
309+ ret = pinctrl_scmi_map_pinconf_type_get (config_type , & type );
294310 if (ret )
295311 return ret ;
296312
@@ -345,7 +361,7 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,
345361 unsigned long * configs ,
346362 unsigned int num_configs )
347363{
348- int i , ret ;
364+ int i , cnt , ret ;
349365 struct scmi_pinctrl * pmx = pinctrl_dev_get_drvdata (pctldev );
350366 enum scmi_pinctrl_conf_type config_type [SCMI_NUM_CONFIGS ];
351367 u32 config_value [SCMI_NUM_CONFIGS ];
@@ -361,17 +377,21 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,
361377 if (ret )
362378 return ret ;
363379
380+ cnt = 0 ;
364381 for (i = 0 ; i < num_configs ; i ++ ) {
365382 param = pinconf_to_config_param (configs [i ]);
366- ret = pinctrl_scmi_map_pinconf_type (param , & p_config_type [i ]);
383+ if (param == PIN_CONFIG_PERSIST_STATE )
384+ continue ;
385+ ret = pinctrl_scmi_map_pinconf_type_set (param , & p_config_type [cnt ]);
367386 if (ret ) {
368387 dev_err (pmx -> dev , "Error map pinconf_type %d\n" , ret );
369388 goto free_config ;
370389 }
371- p_config_value [i ] = pinconf_to_config_argument (configs [i ]);
390+ p_config_value [cnt ] = pinconf_to_config_argument (configs [i ]);
391+ cnt ++ ;
372392 }
373393
374- ret = pinctrl_ops -> settings_conf (pmx -> ph , pin , PIN_TYPE , num_configs ,
394+ ret = pinctrl_ops -> settings_conf (pmx -> ph , pin , PIN_TYPE , cnt ,
375395 p_config_type , p_config_value );
376396 if (ret )
377397 dev_err (pmx -> dev , "Error parsing config %d\n" , ret );
@@ -405,7 +425,7 @@ static int pinctrl_scmi_pinconf_group_set(struct pinctrl_dev *pctldev,
405425
406426 for (i = 0 ; i < num_configs ; i ++ ) {
407427 param = pinconf_to_config_param (configs [i ]);
408- ret = pinctrl_scmi_map_pinconf_type (param , & p_config_type [i ]);
428+ ret = pinctrl_scmi_map_pinconf_type_set (param , & p_config_type [i ]);
409429 if (ret ) {
410430 dev_err (pmx -> dev , "Error map pinconf_type %d\n" , ret );
411431 goto free_config ;
@@ -440,7 +460,7 @@ static int pinctrl_scmi_pinconf_group_get(struct pinctrl_dev *pctldev,
440460 return - EINVAL ;
441461
442462 config_type = pinconf_to_config_param (* config );
443- ret = pinctrl_scmi_map_pinconf_type (config_type , & type );
463+ ret = pinctrl_scmi_map_pinconf_type_get (config_type , & type );
444464 if (ret ) {
445465 dev_err (pmx -> dev , "Error map pinconf_type %d\n" , ret );
446466 return ret ;
0 commit comments