13d0407baSopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
23d0407baSopenharmony_ci/*
33d0407baSopenharmony_ci * Internal interface between the core pin control system and the
43d0407baSopenharmony_ci * pin config portions
53d0407baSopenharmony_ci *
63d0407baSopenharmony_ci * Copyright (C) 2011 ST-Ericsson SA
73d0407baSopenharmony_ci * Written on behalf of Linaro for ST-Ericsson
83d0407baSopenharmony_ci * Based on bits of regulator core, gpio core and clk core
93d0407baSopenharmony_ci *
103d0407baSopenharmony_ci * Author: Linus Walleij <linus.walleij@linaro.org>
113d0407baSopenharmony_ci */
123d0407baSopenharmony_ci
133d0407baSopenharmony_ci#ifdef CONFIG_PINCONF
143d0407baSopenharmony_ci
153d0407baSopenharmony_ciint pinconf_check_ops(struct pinctrl_dev *pctldev);
163d0407baSopenharmony_ciint pinconf_validate_map(const struct pinctrl_map *map, int i);
173d0407baSopenharmony_ciint pinconf_map_to_setting(const struct pinctrl_map *map,
183d0407baSopenharmony_ci			  struct pinctrl_setting *setting);
193d0407baSopenharmony_civoid pinconf_free_setting(const struct pinctrl_setting *setting);
203d0407baSopenharmony_ciint pinconf_apply_setting(const struct pinctrl_setting *setting);
213d0407baSopenharmony_ci
223d0407baSopenharmony_ciint pinconf_set_config(struct pinctrl_dev *pctldev, unsigned pin,
233d0407baSopenharmony_ci		       unsigned long *configs, size_t nconfigs);
243d0407baSopenharmony_ci
253d0407baSopenharmony_ci/*
263d0407baSopenharmony_ci * You will only be interested in these if you're using PINCONF
273d0407baSopenharmony_ci * so don't supply any stubs for these.
283d0407baSopenharmony_ci */
293d0407baSopenharmony_ciint pin_config_get_for_pin(struct pinctrl_dev *pctldev, unsigned pin,
303d0407baSopenharmony_ci			   unsigned long *config);
313d0407baSopenharmony_ciint pin_config_group_get(const char *dev_name, const char *pin_group,
323d0407baSopenharmony_ci			 unsigned long *config);
333d0407baSopenharmony_ci
343d0407baSopenharmony_ci#else
353d0407baSopenharmony_ci
363d0407baSopenharmony_cistatic inline int pinconf_check_ops(struct pinctrl_dev *pctldev)
373d0407baSopenharmony_ci{
383d0407baSopenharmony_ci	return 0;
393d0407baSopenharmony_ci}
403d0407baSopenharmony_ci
413d0407baSopenharmony_cistatic inline int pinconf_validate_map(const struct pinctrl_map *map, int i)
423d0407baSopenharmony_ci{
433d0407baSopenharmony_ci	return 0;
443d0407baSopenharmony_ci}
453d0407baSopenharmony_ci
463d0407baSopenharmony_cistatic inline int pinconf_map_to_setting(const struct pinctrl_map *map,
473d0407baSopenharmony_ci			  struct pinctrl_setting *setting)
483d0407baSopenharmony_ci{
493d0407baSopenharmony_ci	return 0;
503d0407baSopenharmony_ci}
513d0407baSopenharmony_ci
523d0407baSopenharmony_cistatic inline void pinconf_free_setting(const struct pinctrl_setting *setting)
533d0407baSopenharmony_ci{
543d0407baSopenharmony_ci}
553d0407baSopenharmony_ci
563d0407baSopenharmony_cistatic inline int pinconf_apply_setting(const struct pinctrl_setting *setting)
573d0407baSopenharmony_ci{
583d0407baSopenharmony_ci	return 0;
593d0407baSopenharmony_ci}
603d0407baSopenharmony_ci
613d0407baSopenharmony_cistatic inline int pinconf_set_config(struct pinctrl_dev *pctldev, unsigned pin,
623d0407baSopenharmony_ci				     unsigned long *configs, size_t nconfigs)
633d0407baSopenharmony_ci{
643d0407baSopenharmony_ci	return -ENOTSUPP;
653d0407baSopenharmony_ci}
663d0407baSopenharmony_ci
673d0407baSopenharmony_ci#endif
683d0407baSopenharmony_ci
693d0407baSopenharmony_ci#if defined(CONFIG_PINCONF) && defined(CONFIG_DEBUG_FS)
703d0407baSopenharmony_ci
713d0407baSopenharmony_civoid pinconf_show_map(struct seq_file *s, const struct pinctrl_map *map);
723d0407baSopenharmony_civoid pinconf_show_setting(struct seq_file *s,
733d0407baSopenharmony_ci			  const struct pinctrl_setting *setting);
743d0407baSopenharmony_civoid pinconf_init_device_debugfs(struct dentry *devroot,
753d0407baSopenharmony_ci				 struct pinctrl_dev *pctldev);
763d0407baSopenharmony_ci
773d0407baSopenharmony_ci#else
783d0407baSopenharmony_ci
793d0407baSopenharmony_cistatic inline void pinconf_show_map(struct seq_file *s,
803d0407baSopenharmony_ci				    const struct pinctrl_map *map)
813d0407baSopenharmony_ci{
823d0407baSopenharmony_ci}
833d0407baSopenharmony_ci
843d0407baSopenharmony_cistatic inline void pinconf_show_setting(struct seq_file *s,
853d0407baSopenharmony_ci					const struct pinctrl_setting *setting)
863d0407baSopenharmony_ci{
873d0407baSopenharmony_ci}
883d0407baSopenharmony_ci
893d0407baSopenharmony_cistatic inline void pinconf_init_device_debugfs(struct dentry *devroot,
903d0407baSopenharmony_ci					       struct pinctrl_dev *pctldev)
913d0407baSopenharmony_ci{
923d0407baSopenharmony_ci}
933d0407baSopenharmony_ci
943d0407baSopenharmony_ci#endif
953d0407baSopenharmony_ci
963d0407baSopenharmony_ci/*
973d0407baSopenharmony_ci * The following functions are available if the driver uses the generic
983d0407baSopenharmony_ci * pin config.
993d0407baSopenharmony_ci */
1003d0407baSopenharmony_ci
1013d0407baSopenharmony_ci#if defined(CONFIG_GENERIC_PINCONF) && defined(CONFIG_DEBUG_FS)
1023d0407baSopenharmony_ci
1033d0407baSopenharmony_civoid pinconf_generic_dump_pins(struct pinctrl_dev *pctldev,
1043d0407baSopenharmony_ci			       struct seq_file *s, const char *gname,
1053d0407baSopenharmony_ci			       unsigned pin);
1063d0407baSopenharmony_ci
1073d0407baSopenharmony_civoid pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
1083d0407baSopenharmony_ci				 struct seq_file *s, unsigned long config);
1093d0407baSopenharmony_ci#else
1103d0407baSopenharmony_ci
1113d0407baSopenharmony_cistatic inline void pinconf_generic_dump_pins(struct pinctrl_dev *pctldev,
1123d0407baSopenharmony_ci					     struct seq_file *s,
1133d0407baSopenharmony_ci					     const char *gname, unsigned pin)
1143d0407baSopenharmony_ci{
1153d0407baSopenharmony_ci	return;
1163d0407baSopenharmony_ci}
1173d0407baSopenharmony_ci
1183d0407baSopenharmony_cistatic inline void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
1193d0407baSopenharmony_ci					       struct seq_file *s,
1203d0407baSopenharmony_ci					       unsigned long config)
1213d0407baSopenharmony_ci{
1223d0407baSopenharmony_ci	return;
1233d0407baSopenharmony_ci}
1243d0407baSopenharmony_ci#endif
1253d0407baSopenharmony_ci
1263d0407baSopenharmony_ci#if defined(CONFIG_GENERIC_PINCONF) && defined(CONFIG_OF)
1273d0407baSopenharmony_ciint pinconf_generic_parse_dt_config(struct device_node *np,
1283d0407baSopenharmony_ci				    struct pinctrl_dev *pctldev,
1293d0407baSopenharmony_ci				    unsigned long **configs,
1303d0407baSopenharmony_ci				    unsigned int *nconfigs);
1313d0407baSopenharmony_ci#endif
132