xref: /openbmc/linux/drivers/pinctrl/pinconf.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
1af873fceSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2ae6b4d85SLinus Walleij /*
3ae6b4d85SLinus Walleij  * Internal interface between the core pin control system and the
4ae6b4d85SLinus Walleij  * pin config portions
5ae6b4d85SLinus Walleij  *
6ae6b4d85SLinus Walleij  * Copyright (C) 2011 ST-Ericsson SA
7ae6b4d85SLinus Walleij  * Written on behalf of Linaro for ST-Ericsson
8ae6b4d85SLinus Walleij  * Based on bits of regulator core, gpio core and clk core
9ae6b4d85SLinus Walleij  *
10ae6b4d85SLinus Walleij  * Author: Linus Walleij <linus.walleij@linaro.org>
11ae6b4d85SLinus Walleij  */
12ae6b4d85SLinus Walleij 
13*e5530adcSAndy Shevchenko #include <linux/errno.h>
14*e5530adcSAndy Shevchenko 
15*e5530adcSAndy Shevchenko struct dentry;
16*e5530adcSAndy Shevchenko struct device_node;
17*e5530adcSAndy Shevchenko struct seq_file;
18*e5530adcSAndy Shevchenko 
19*e5530adcSAndy Shevchenko struct pinctrl_dev;
20*e5530adcSAndy Shevchenko struct pinctrl_map;
21*e5530adcSAndy Shevchenko struct pinctrl_setting;
22*e5530adcSAndy Shevchenko 
23ae6b4d85SLinus Walleij #ifdef CONFIG_PINCONF
24ae6b4d85SLinus Walleij 
25b9130b77STony Lindgren int pinconf_check_ops(struct pinctrl_dev *pctldev);
263f713b7cSMasahiro Yamada int pinconf_validate_map(const struct pinctrl_map *map, int i);
273f713b7cSMasahiro Yamada int pinconf_map_to_setting(const struct pinctrl_map *map,
281e2082b5SStephen Warren 			  struct pinctrl_setting *setting);
293f713b7cSMasahiro Yamada void pinconf_free_setting(const struct pinctrl_setting *setting);
303f713b7cSMasahiro Yamada int pinconf_apply_setting(const struct pinctrl_setting *setting);
31ae6b4d85SLinus Walleij 
3215381bc7SMika Westerberg int pinconf_set_config(struct pinctrl_dev *pctldev, unsigned pin,
3315381bc7SMika Westerberg 		       unsigned long *configs, size_t nconfigs);
3415381bc7SMika Westerberg 
35394349f7SLinus Walleij /*
36394349f7SLinus Walleij  * You will only be interested in these if you're using PINCONF
37394349f7SLinus Walleij  * so don't supply any stubs for these.
38394349f7SLinus Walleij  */
39394349f7SLinus Walleij int pin_config_get_for_pin(struct pinctrl_dev *pctldev, unsigned pin,
40394349f7SLinus Walleij 			   unsigned long *config);
41394349f7SLinus Walleij int pin_config_group_get(const char *dev_name, const char *pin_group,
42394349f7SLinus Walleij 			 unsigned long *config);
43394349f7SLinus Walleij 
44ae6b4d85SLinus Walleij #else
45ae6b4d85SLinus Walleij 
pinconf_check_ops(struct pinctrl_dev * pctldev)46b9130b77STony Lindgren static inline int pinconf_check_ops(struct pinctrl_dev *pctldev)
47ae6b4d85SLinus Walleij {
48ae6b4d85SLinus Walleij 	return 0;
49ae6b4d85SLinus Walleij }
50ae6b4d85SLinus Walleij 
pinconf_validate_map(const struct pinctrl_map * map,int i)513f713b7cSMasahiro Yamada static inline int pinconf_validate_map(const struct pinctrl_map *map, int i)
521e2082b5SStephen Warren {
531e2082b5SStephen Warren 	return 0;
541e2082b5SStephen Warren }
551e2082b5SStephen Warren 
pinconf_map_to_setting(const struct pinctrl_map * map,struct pinctrl_setting * setting)563f713b7cSMasahiro Yamada static inline int pinconf_map_to_setting(const struct pinctrl_map *map,
571e2082b5SStephen Warren 			  struct pinctrl_setting *setting)
581e2082b5SStephen Warren {
591e2082b5SStephen Warren 	return 0;
601e2082b5SStephen Warren }
611e2082b5SStephen Warren 
pinconf_free_setting(const struct pinctrl_setting * setting)623f713b7cSMasahiro Yamada static inline void pinconf_free_setting(const struct pinctrl_setting *setting)
631e2082b5SStephen Warren {
641e2082b5SStephen Warren }
651e2082b5SStephen Warren 
pinconf_apply_setting(const struct pinctrl_setting * setting)663f713b7cSMasahiro Yamada static inline int pinconf_apply_setting(const struct pinctrl_setting *setting)
671e2082b5SStephen Warren {
681e2082b5SStephen Warren 	return 0;
691e2082b5SStephen Warren }
701e2082b5SStephen Warren 
pinconf_set_config(struct pinctrl_dev * pctldev,unsigned pin,unsigned long * configs,size_t nconfigs)7115381bc7SMika Westerberg static inline int pinconf_set_config(struct pinctrl_dev *pctldev, unsigned pin,
7215381bc7SMika Westerberg 				     unsigned long *configs, size_t nconfigs)
7315381bc7SMika Westerberg {
7415381bc7SMika Westerberg 	return -ENOTSUPP;
7515381bc7SMika Westerberg }
7615381bc7SMika Westerberg 
77c736d73cSStephen Warren #endif
78c736d73cSStephen Warren 
7996593afeSViresh Kumar #if defined(CONFIG_PINCONF) && defined(CONFIG_DEBUG_FS)
80c736d73cSStephen Warren 
813f713b7cSMasahiro Yamada void pinconf_show_map(struct seq_file *s, const struct pinctrl_map *map);
82c736d73cSStephen Warren void pinconf_show_setting(struct seq_file *s,
833f713b7cSMasahiro Yamada 			  const struct pinctrl_setting *setting);
84c736d73cSStephen Warren void pinconf_init_device_debugfs(struct dentry *devroot,
85c736d73cSStephen Warren 				 struct pinctrl_dev *pctldev);
86c736d73cSStephen Warren 
87c736d73cSStephen Warren #else
88c736d73cSStephen Warren 
pinconf_show_map(struct seq_file * s,const struct pinctrl_map * map)891e2082b5SStephen Warren static inline void pinconf_show_map(struct seq_file *s,
903f713b7cSMasahiro Yamada 				    const struct pinctrl_map *map)
911e2082b5SStephen Warren {
921e2082b5SStephen Warren }
931e2082b5SStephen Warren 
pinconf_show_setting(struct seq_file * s,const struct pinctrl_setting * setting)941e2082b5SStephen Warren static inline void pinconf_show_setting(struct seq_file *s,
953f713b7cSMasahiro Yamada 					const struct pinctrl_setting *setting)
961e2082b5SStephen Warren {
971e2082b5SStephen Warren }
981e2082b5SStephen Warren 
pinconf_init_device_debugfs(struct dentry * devroot,struct pinctrl_dev * pctldev)99ae6b4d85SLinus Walleij static inline void pinconf_init_device_debugfs(struct dentry *devroot,
100ae6b4d85SLinus Walleij 					       struct pinctrl_dev *pctldev)
101ae6b4d85SLinus Walleij {
102ae6b4d85SLinus Walleij }
103ae6b4d85SLinus Walleij 
104ae6b4d85SLinus Walleij #endif
105394349f7SLinus Walleij 
106394349f7SLinus Walleij /*
107394349f7SLinus Walleij  * The following functions are available if the driver uses the generic
108394349f7SLinus Walleij  * pin config.
109394349f7SLinus Walleij  */
110394349f7SLinus Walleij 
111bf4d7be5SSachin Kamat #if defined(CONFIG_GENERIC_PINCONF) && defined(CONFIG_DEBUG_FS)
112394349f7SLinus Walleij 
113dd4d01f7SSoren Brinkmann void pinconf_generic_dump_pins(struct pinctrl_dev *pctldev,
114dd4d01f7SSoren Brinkmann 			       struct seq_file *s, const char *gname,
115dd4d01f7SSoren Brinkmann 			       unsigned pin);
116394349f7SLinus Walleij 
1179cfd1724SHaojian Zhuang void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
1189cfd1724SHaojian Zhuang 				 struct seq_file *s, unsigned long config);
119394349f7SLinus Walleij #else
120394349f7SLinus Walleij 
pinconf_generic_dump_pins(struct pinctrl_dev * pctldev,struct seq_file * s,const char * gname,unsigned pin)121dd4d01f7SSoren Brinkmann static inline void pinconf_generic_dump_pins(struct pinctrl_dev *pctldev,
122394349f7SLinus Walleij 					     struct seq_file *s,
123dd4d01f7SSoren Brinkmann 					     const char *gname, unsigned pin)
124394349f7SLinus Walleij {
125394349f7SLinus Walleij 	return;
126394349f7SLinus Walleij }
127394349f7SLinus Walleij 
pinconf_generic_dump_config(struct pinctrl_dev * pctldev,struct seq_file * s,unsigned long config)1289cfd1724SHaojian Zhuang static inline void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
1299cfd1724SHaojian Zhuang 					       struct seq_file *s,
1309cfd1724SHaojian Zhuang 					       unsigned long config)
1319cfd1724SHaojian Zhuang {
1329cfd1724SHaojian Zhuang 	return;
1339cfd1724SHaojian Zhuang }
134394349f7SLinus Walleij #endif
1357db9af4bSHeiko Stübner 
1367db9af4bSHeiko Stübner #if defined(CONFIG_GENERIC_PINCONF) && defined(CONFIG_OF)
1377db9af4bSHeiko Stübner int pinconf_generic_parse_dt_config(struct device_node *np,
138dd4d01f7SSoren Brinkmann 				    struct pinctrl_dev *pctldev,
1397db9af4bSHeiko Stübner 				    unsigned long **configs,
1407db9af4bSHeiko Stübner 				    unsigned int *nconfigs);
1417db9af4bSHeiko Stübner #endif
142