xref: /linux/include/linux/pinctrl/pinctrl.h (revision ec2e0fb07d789976c601bec19ecced7a501c3705)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Interface the pinctrl subsystem
4  *
5  * Copyright (C) 2011 ST-Ericsson SA
6  * Written on behalf of Linaro for ST-Ericsson
7  * This interface is used in the core to keep track of pins.
8  *
9  * Author: Linus Walleij <linus.walleij@linaro.org>
10  */
11 #ifndef __LINUX_PINCTRL_PINCTRL_H
12 #define __LINUX_PINCTRL_PINCTRL_H
13 
14 #include <linux/bits.h>
15 #include <linux/types.h>
16 
17 struct device;
18 struct device_node;
19 struct gpio_chip;
20 struct module;
21 struct seq_file;
22 
23 struct pin_config_item;
24 struct pinconf_generic_params;
25 struct pinconf_ops;
26 struct pinctrl_dev;
27 struct pinctrl_map;
28 struct pinmux_ops;
29 
30 /**
31  * struct pingroup - provides information on pingroup
32  * @name: a name for pingroup
33  * @pins: an array of pins in the pingroup
34  * @npins: number of pins in the pingroup
35  */
36 struct pingroup {
37 	const char *name;
38 	const unsigned int *pins;
39 	size_t npins;
40 };
41 
42 /* Convenience macro to define a single named or anonymous pingroup */
43 #define PINCTRL_PINGROUP(_name, _pins, _npins)	\
44 (struct pingroup) {				\
45 	.name = _name,				\
46 	.pins = _pins,				\
47 	.npins = _npins,			\
48 }
49 
50 /**
51  * struct pinctrl_pin_desc - boards/machines provide information on their
52  * pins, pads or other muxable units in this struct
53  * @number: unique pin number from the global pin number space
54  * @name: a name for this pin
55  * @drv_data: driver-defined per-pin data. pinctrl core does not touch this
56  */
57 struct pinctrl_pin_desc {
58 	unsigned int number;
59 	const char *name;
60 	void *drv_data;
61 };
62 
63 /* Convenience macro to define a single named or anonymous pin descriptor */
64 #define PINCTRL_PIN(a, b) { .number = a, .name = b }
65 #define PINCTRL_PIN_ANON(a) { .number = a }
66 
67 /**
68  * struct pinctrl_gpio_range - each pin controller can provide subranges of
69  * the GPIO number space to be handled by the controller
70  * @node: list node for internal use
71  * @name: a name for the chip in this range
72  * @id: an ID number for the chip in this range
73  * @base: base offset of the GPIO range
74  * @pin_base: base pin number of the GPIO range if pins == NULL
75  * @npins: number of pins in the GPIO range, including the base number
76  * @pins: enumeration of pins in GPIO range or NULL
77  * @gc: an optional pointer to a gpio_chip
78  */
79 struct pinctrl_gpio_range {
80 	struct list_head node;
81 	const char *name;
82 	unsigned int id;
83 	unsigned int base;
84 	unsigned int pin_base;
85 	unsigned int npins;
86 	unsigned int const *pins;
87 	struct gpio_chip *gc;
88 };
89 
90 /**
91  * struct pinctrl_ops - global pin control operations, to be implemented by
92  * pin controller drivers.
93  * @get_groups_count: Returns the count of total number of groups registered.
94  * @get_group_name: return the group name of the pin group
95  * @get_group_pins: return an array of pins corresponding to a certain
96  *	group selector @pins, and the size of the array in @num_pins
97  * @pin_dbg_show: optional debugfs display hook that will provide per-device
98  *	info for a certain pin in debugfs
99  * @dt_node_to_map: parse a device tree "pin configuration node", and create
100  *	mapping table entries for it. These are returned through the @map and
101  *	@num_maps output parameters. This function is optional, and may be
102  *	omitted for pinctrl drivers that do not support device tree.
103  * @dt_free_map: free mapping table entries created via @dt_node_to_map. The
104  *	top-level @map pointer must be freed, along with any dynamically
105  *	allocated members of the mapping table entries themselves. This
106  *	function is optional, and may be omitted for pinctrl drivers that do
107  *	not support device tree.
108  */
109 struct pinctrl_ops {
110 	int (*get_groups_count) (struct pinctrl_dev *pctldev);
111 	const char *(*get_group_name) (struct pinctrl_dev *pctldev,
112 				       unsigned int selector);
113 	int (*get_group_pins) (struct pinctrl_dev *pctldev,
114 			       unsigned int selector,
115 			       const unsigned int **pins,
116 			       unsigned int *num_pins);
117 	void (*pin_dbg_show) (struct pinctrl_dev *pctldev, struct seq_file *s,
118 			      unsigned int offset);
119 	int (*dt_node_to_map) (struct pinctrl_dev *pctldev,
120 			       struct device_node *np_config,
121 			       struct pinctrl_map **map, unsigned int *num_maps);
122 	void (*dt_free_map) (struct pinctrl_dev *pctldev,
123 			     struct pinctrl_map *map, unsigned int num_maps);
124 };
125 
126 /**
127  * struct pinctrl_desc - pin controller descriptor, register this to pin
128  * control subsystem
129  * @name: name for the pin controller
130  * @pins: an array of pin descriptors describing all the pins handled by
131  *	this pin controller
132  * @npins: number of descriptors in the array, usually just ARRAY_SIZE()
133  *	of the pins field above
134  * @pctlops: pin control operation vtable, to support global concepts like
135  *	grouping of pins, this is optional.
136  * @pmxops: pinmux operations vtable, if you support pinmuxing in your driver
137  * @confops: pin config operations vtable, if you support pin configuration in
138  *	your driver
139  * @owner: module providing the pin controller, used for refcounting
140  * @num_custom_params: Number of driver-specific custom parameters to be parsed
141  *	from the hardware description
142  * @custom_params: List of driver_specific custom parameters to be parsed from
143  *	the hardware description
144  * @custom_conf_items: Information how to print @params in debugfs, must be
145  *	the same size as the @custom_params, i.e. @num_custom_params
146  * @link_consumers: If true create a device link between pinctrl and its
147  *	consumers (i.e. the devices requesting pin control states). This is
148  *	sometimes necessary to ascertain the right suspend/resume order for
149  *	example.
150  */
151 struct pinctrl_desc {
152 	const char *name;
153 	const struct pinctrl_pin_desc *pins;
154 	unsigned int npins;
155 	const struct pinctrl_ops *pctlops;
156 	const struct pinmux_ops *pmxops;
157 	const struct pinconf_ops *confops;
158 	struct module *owner;
159 #ifdef CONFIG_GENERIC_PINCONF
160 	unsigned int num_custom_params;
161 	const struct pinconf_generic_params *custom_params;
162 	const struct pin_config_item *custom_conf_items;
163 #endif
164 	bool link_consumers;
165 };
166 
167 /* External interface to pin controller */
168 
169 extern int pinctrl_register_and_init(const struct pinctrl_desc *pctldesc,
170 				     struct device *dev, void *driver_data,
171 				     struct pinctrl_dev **pctldev);
172 extern int pinctrl_enable(struct pinctrl_dev *pctldev);
173 
174 /* Please use pinctrl_register_and_init() and pinctrl_enable() instead */
175 extern struct pinctrl_dev *pinctrl_register(const struct pinctrl_desc *pctldesc,
176 				struct device *dev, void *driver_data);
177 
178 extern void pinctrl_unregister(struct pinctrl_dev *pctldev);
179 
180 extern int devm_pinctrl_register_and_init(struct device *dev,
181 				const struct pinctrl_desc *pctldesc,
182 				void *driver_data,
183 				struct pinctrl_dev **pctldev);
184 
185 /* Please use devm_pinctrl_register_and_init() instead */
186 extern struct pinctrl_dev *devm_pinctrl_register(struct device *dev,
187 				const struct pinctrl_desc *pctldesc,
188 				void *driver_data);
189 
190 extern void devm_pinctrl_unregister(struct device *dev,
191 				struct pinctrl_dev *pctldev);
192 
193 extern void pinctrl_add_gpio_range(struct pinctrl_dev *pctldev,
194 				struct pinctrl_gpio_range *range);
195 extern void pinctrl_add_gpio_ranges(struct pinctrl_dev *pctldev,
196 				struct pinctrl_gpio_range *ranges,
197 				unsigned int nranges);
198 extern void pinctrl_remove_gpio_range(struct pinctrl_dev *pctldev,
199 				struct pinctrl_gpio_range *range);
200 
201 extern struct pinctrl_dev *pinctrl_find_and_add_gpio_range(const char *devname,
202 		struct pinctrl_gpio_range *range);
203 extern struct pinctrl_gpio_range *
204 pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev,
205 				 unsigned int pin);
206 extern int pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
207 				  const char *pin_group, const unsigned int **pins,
208 				  unsigned int *num_pins);
209 
210 #define PINFUNCTION_FLAG_GPIO	BIT(0)
211 
212 /**
213  * struct pinfunction - Description about a function
214  * @name: Name of the function
215  * @groups: An array of groups for this function
216  * @ngroups: Number of groups in @groups
217  * @flags: Additional pin function flags
218  */
219 struct pinfunction {
220 	const char *name;
221 	const char * const *groups;
222 	size_t ngroups;
223 	unsigned long flags;
224 };
225 
226 /* Convenience macro to define a single named pinfunction */
227 #define PINCTRL_PINFUNCTION(_name, _groups, _ngroups)	\
228 (struct pinfunction) {					\
229 		.name = (_name),			\
230 		.groups = (_groups),			\
231 		.ngroups = (_ngroups),			\
232 	}
233 
234 /* Same as PINCTRL_PINFUNCTION() but for the GPIO category of functions */
235 #define PINCTRL_GPIO_PINFUNCTION(_name, _groups, _ngroups)	\
236 (struct pinfunction) {						\
237 		.name = (_name),				\
238 		.groups = (_groups),				\
239 		.ngroups = (_ngroups),				\
240 		.flags = PINFUNCTION_FLAG_GPIO,			\
241 	}
242 
243 #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_PINCTRL)
244 extern struct pinctrl_dev *of_pinctrl_get(struct device_node *np);
245 #else
246 static inline
of_pinctrl_get(struct device_node * np)247 struct pinctrl_dev *of_pinctrl_get(struct device_node *np)
248 {
249 	return NULL;
250 }
251 #endif /* CONFIG_OF */
252 
253 extern const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev);
254 extern const char *pinctrl_dev_get_devname(struct pinctrl_dev *pctldev);
255 extern void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev);
256 
257 #endif /* __LINUX_PINCTRL_PINCTRL_H */
258