xref: /openbmc/linux/drivers/pinctrl/pinmux.h (revision e5530adc)
1af873fceSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
22744e8afSLinus Walleij /*
32744e8afSLinus Walleij  * Internal interface between the core pin control system and the
42744e8afSLinus Walleij  * pinmux portions
52744e8afSLinus Walleij  *
62744e8afSLinus Walleij  * Copyright (C) 2011 ST-Ericsson SA
72744e8afSLinus Walleij  * Written on behalf of Linaro for ST-Ericsson
82744e8afSLinus Walleij  * Based on bits of regulator core, gpio core and clk core
92744e8afSLinus Walleij  *
102744e8afSLinus Walleij  * Author: Linus Walleij <linus.walleij@linaro.org>
112744e8afSLinus Walleij  */
12*e5530adcSAndy Shevchenko 
13*e5530adcSAndy Shevchenko #include <linux/types.h>
14*e5530adcSAndy Shevchenko 
15*e5530adcSAndy Shevchenko struct dentry;
16*e5530adcSAndy Shevchenko struct seq_file;
17*e5530adcSAndy Shevchenko 
18*e5530adcSAndy Shevchenko struct pinctrl_dev;
19*e5530adcSAndy Shevchenko struct pinctrl_gpio_range;
20*e5530adcSAndy Shevchenko struct pinctrl_map;
21*e5530adcSAndy Shevchenko struct pinctrl_setting;
22*e5530adcSAndy Shevchenko 
232744e8afSLinus Walleij #ifdef CONFIG_PINMUX
242744e8afSLinus Walleij 
25b9130b77STony Lindgren int pinmux_check_ops(struct pinctrl_dev *pctldev);
267ecdb16fSStephen Warren 
273f713b7cSMasahiro Yamada int pinmux_validate_map(const struct pinctrl_map *map, int i);
281e2082b5SStephen Warren 
29472a61e7SStefan Wahren bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, unsigned pin);
30472a61e7SStefan Wahren 
31befe5bdfSLinus Walleij int pinmux_request_gpio(struct pinctrl_dev *pctldev,
32befe5bdfSLinus Walleij 			struct pinctrl_gpio_range *range,
33befe5bdfSLinus Walleij 			unsigned pin, unsigned gpio);
34befe5bdfSLinus Walleij void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
35befe5bdfSLinus Walleij 		      struct pinctrl_gpio_range *range);
36befe5bdfSLinus Walleij int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
37befe5bdfSLinus Walleij 			  struct pinctrl_gpio_range *range,
38befe5bdfSLinus Walleij 			  unsigned pin, bool input);
397ecdb16fSStephen Warren 
403f713b7cSMasahiro Yamada int pinmux_map_to_setting(const struct pinctrl_map *map,
417ecdb16fSStephen Warren 			  struct pinctrl_setting *setting);
423f713b7cSMasahiro Yamada void pinmux_free_setting(const struct pinctrl_setting *setting);
433f713b7cSMasahiro Yamada int pinmux_enable_setting(const struct pinctrl_setting *setting);
443f713b7cSMasahiro Yamada void pinmux_disable_setting(const struct pinctrl_setting *setting);
457ecdb16fSStephen Warren 
462744e8afSLinus Walleij #else
472744e8afSLinus Walleij 
pinmux_check_ops(struct pinctrl_dev * pctldev)48b9130b77STony Lindgren static inline int pinmux_check_ops(struct pinctrl_dev *pctldev)
492744e8afSLinus Walleij {
502744e8afSLinus Walleij 	return 0;
512744e8afSLinus Walleij }
522744e8afSLinus Walleij 
pinmux_validate_map(const struct pinctrl_map * map,int i)533f713b7cSMasahiro Yamada static inline int pinmux_validate_map(const struct pinctrl_map *map, int i)
541e2082b5SStephen Warren {
551e2082b5SStephen Warren 	return 0;
561e2082b5SStephen Warren }
571e2082b5SStephen Warren 
pinmux_can_be_used_for_gpio(struct pinctrl_dev * pctldev,unsigned pin)58472a61e7SStefan Wahren static inline bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev,
59472a61e7SStefan Wahren 					       unsigned pin)
60472a61e7SStefan Wahren {
61472a61e7SStefan Wahren 	return true;
62472a61e7SStefan Wahren }
63472a61e7SStefan Wahren 
pinmux_request_gpio(struct pinctrl_dev * pctldev,struct pinctrl_gpio_range * range,unsigned pin,unsigned gpio)64befe5bdfSLinus Walleij static inline int pinmux_request_gpio(struct pinctrl_dev *pctldev,
65befe5bdfSLinus Walleij 			struct pinctrl_gpio_range *range,
66befe5bdfSLinus Walleij 			unsigned pin, unsigned gpio)
672744e8afSLinus Walleij {
682744e8afSLinus Walleij 	return 0;
692744e8afSLinus Walleij }
702744e8afSLinus Walleij 
pinmux_free_gpio(struct pinctrl_dev * pctldev,unsigned pin,struct pinctrl_gpio_range * range)71befe5bdfSLinus Walleij static inline void pinmux_free_gpio(struct pinctrl_dev *pctldev,
72befe5bdfSLinus Walleij 				    unsigned pin,
73befe5bdfSLinus Walleij 				    struct pinctrl_gpio_range *range)
74befe5bdfSLinus Walleij {
75befe5bdfSLinus Walleij }
76befe5bdfSLinus Walleij 
pinmux_gpio_direction(struct pinctrl_dev * pctldev,struct pinctrl_gpio_range * range,unsigned pin,bool input)77befe5bdfSLinus Walleij static inline int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
78befe5bdfSLinus Walleij 					struct pinctrl_gpio_range *range,
79befe5bdfSLinus Walleij 					unsigned pin, bool input)
80befe5bdfSLinus Walleij {
81befe5bdfSLinus Walleij 	return 0;
82befe5bdfSLinus Walleij }
83befe5bdfSLinus Walleij 
pinmux_map_to_setting(const struct pinctrl_map * map,struct pinctrl_setting * setting)843f713b7cSMasahiro Yamada static inline int pinmux_map_to_setting(const struct pinctrl_map *map,
857ecdb16fSStephen Warren 			  struct pinctrl_setting *setting)
86befe5bdfSLinus Walleij {
87befe5bdfSLinus Walleij 	return 0;
88befe5bdfSLinus Walleij }
89befe5bdfSLinus Walleij 
pinmux_free_setting(const struct pinctrl_setting * setting)903f713b7cSMasahiro Yamada static inline void pinmux_free_setting(const struct pinctrl_setting *setting)
91befe5bdfSLinus Walleij {
92befe5bdfSLinus Walleij }
93befe5bdfSLinus Walleij 
pinmux_enable_setting(const struct pinctrl_setting * setting)943f713b7cSMasahiro Yamada static inline int pinmux_enable_setting(const struct pinctrl_setting *setting)
95befe5bdfSLinus Walleij {
967ecdb16fSStephen Warren 	return 0;
97befe5bdfSLinus Walleij }
98befe5bdfSLinus Walleij 
pinmux_disable_setting(const struct pinctrl_setting * setting)993f713b7cSMasahiro Yamada static inline void pinmux_disable_setting(const struct pinctrl_setting *setting)
100befe5bdfSLinus Walleij {
101befe5bdfSLinus Walleij }
102befe5bdfSLinus Walleij 
103c736d73cSStephen Warren #endif
104c736d73cSStephen Warren 
105c736d73cSStephen Warren #if defined(CONFIG_PINMUX) && defined(CONFIG_DEBUG_FS)
106c736d73cSStephen Warren 
1073f713b7cSMasahiro Yamada void pinmux_show_map(struct seq_file *s, const struct pinctrl_map *map);
108c736d73cSStephen Warren void pinmux_show_setting(struct seq_file *s,
1093f713b7cSMasahiro Yamada 			 const struct pinctrl_setting *setting);
110c736d73cSStephen Warren void pinmux_init_device_debugfs(struct dentry *devroot,
111c736d73cSStephen Warren 				struct pinctrl_dev *pctldev);
112c736d73cSStephen Warren 
113c736d73cSStephen Warren #else
114c736d73cSStephen Warren 
pinmux_show_map(struct seq_file * s,const struct pinctrl_map * map)1151e2082b5SStephen Warren static inline void pinmux_show_map(struct seq_file *s,
1163f713b7cSMasahiro Yamada 				   const struct pinctrl_map *map)
11703665e0fSStephen Warren {
11803665e0fSStephen Warren }
11903665e0fSStephen Warren 
pinmux_show_setting(struct seq_file * s,const struct pinctrl_setting * setting)1201e2082b5SStephen Warren static inline void pinmux_show_setting(struct seq_file *s,
1213f713b7cSMasahiro Yamada 				       const struct pinctrl_setting *setting)
1221e2082b5SStephen Warren {
1231e2082b5SStephen Warren }
1241e2082b5SStephen Warren 
pinmux_init_device_debugfs(struct dentry * devroot,struct pinctrl_dev * pctldev)1251e2082b5SStephen Warren static inline void pinmux_init_device_debugfs(struct dentry *devroot,
1261e2082b5SStephen Warren 					      struct pinctrl_dev *pctldev)
1272744e8afSLinus Walleij {
1282744e8afSLinus Walleij }
1292744e8afSLinus Walleij 
1302744e8afSLinus Walleij #endif
131a76edc89STony Lindgren 
132a76edc89STony Lindgren #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS
133a76edc89STony Lindgren 
134a76edc89STony Lindgren /**
135a76edc89STony Lindgren  * struct function_desc - generic function descriptor
136a76edc89STony Lindgren  * @name: name of the function
137a76edc89STony Lindgren  * @group_names: array of pin group names
138a76edc89STony Lindgren  * @num_group_names: number of pin group names
139a76edc89STony Lindgren  * @data: pin controller driver specific data
140a76edc89STony Lindgren  */
141a76edc89STony Lindgren struct function_desc {
142a76edc89STony Lindgren 	const char *name;
143bd0aae66SRafał Miłecki 	const char * const *group_names;
144a76edc89STony Lindgren 	int num_group_names;
145a76edc89STony Lindgren 	void *data;
146a76edc89STony Lindgren };
147a76edc89STony Lindgren 
148a76edc89STony Lindgren int pinmux_generic_get_function_count(struct pinctrl_dev *pctldev);
149a76edc89STony Lindgren 
150a76edc89STony Lindgren const char *
151a76edc89STony Lindgren pinmux_generic_get_function_name(struct pinctrl_dev *pctldev,
152a76edc89STony Lindgren 				 unsigned int selector);
153a76edc89STony Lindgren 
154a76edc89STony Lindgren int pinmux_generic_get_function_groups(struct pinctrl_dev *pctldev,
155a76edc89STony Lindgren 				       unsigned int selector,
156a76edc89STony Lindgren 				       const char * const **groups,
157a76edc89STony Lindgren 				       unsigned * const num_groups);
158a76edc89STony Lindgren 
159a76edc89STony Lindgren struct function_desc *pinmux_generic_get_function(struct pinctrl_dev *pctldev,
160a76edc89STony Lindgren 						  unsigned int selector);
161a76edc89STony Lindgren 
162a76edc89STony Lindgren int pinmux_generic_add_function(struct pinctrl_dev *pctldev,
163a76edc89STony Lindgren 				const char *name,
164bd0aae66SRafał Miłecki 				const char * const *groups,
165a76edc89STony Lindgren 				unsigned const num_groups,
166a76edc89STony Lindgren 				void *data);
167a76edc89STony Lindgren 
168a76edc89STony Lindgren int pinmux_generic_remove_function(struct pinctrl_dev *pctldev,
169a76edc89STony Lindgren 				   unsigned int selector);
170a76edc89STony Lindgren 
171a76edc89STony Lindgren void pinmux_generic_free_functions(struct pinctrl_dev *pctldev);
172a76edc89STony Lindgren 
173a76edc89STony Lindgren #else
174a76edc89STony Lindgren 
pinmux_generic_free_functions(struct pinctrl_dev * pctldev)175a76edc89STony Lindgren static inline void pinmux_generic_free_functions(struct pinctrl_dev *pctldev)
176a76edc89STony Lindgren {
177a76edc89STony Lindgren }
178a76edc89STony Lindgren 
179a76edc89STony Lindgren #endif /* CONFIG_GENERIC_PINMUX_FUNCTIONS */
180