0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include <linux/kref.h>
0012 #include <linux/mutex.h>
0013 #include <linux/radix-tree.h>
0014 #include <linux/pinctrl/pinconf.h>
0015 #include <linux/pinctrl/machine.h>
0016
0017 struct pinctrl_gpio_range;
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042 struct pinctrl_dev {
0043 struct list_head node;
0044 struct pinctrl_desc *desc;
0045 struct radix_tree_root pin_desc_tree;
0046 #ifdef CONFIG_GENERIC_PINCTRL_GROUPS
0047 struct radix_tree_root pin_group_tree;
0048 unsigned int num_groups;
0049 #endif
0050 #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS
0051 struct radix_tree_root pin_function_tree;
0052 unsigned int num_functions;
0053 #endif
0054 struct list_head gpio_ranges;
0055 struct device *dev;
0056 struct module *owner;
0057 void *driver_data;
0058 struct pinctrl *p;
0059 struct pinctrl_state *hog_default;
0060 struct pinctrl_state *hog_sleep;
0061 struct mutex mutex;
0062 #ifdef CONFIG_DEBUG_FS
0063 struct dentry *device_root;
0064 #endif
0065 };
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077 struct pinctrl {
0078 struct list_head node;
0079 struct device *dev;
0080 struct list_head states;
0081 struct pinctrl_state *state;
0082 struct list_head dt_maps;
0083 struct kref users;
0084 };
0085
0086
0087
0088
0089
0090
0091
0092 struct pinctrl_state {
0093 struct list_head node;
0094 const char *name;
0095 struct list_head settings;
0096 };
0097
0098
0099
0100
0101
0102
0103 struct pinctrl_setting_mux {
0104 unsigned group;
0105 unsigned func;
0106 };
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116 struct pinctrl_setting_configs {
0117 unsigned group_or_pin;
0118 unsigned long *configs;
0119 unsigned num_configs;
0120 };
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131 struct pinctrl_setting {
0132 struct list_head node;
0133 enum pinctrl_map_type type;
0134 struct pinctrl_dev *pctldev;
0135 const char *dev_name;
0136 union {
0137 struct pinctrl_setting_mux mux;
0138 struct pinctrl_setting_configs configs;
0139 } data;
0140 };
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159 struct pin_desc {
0160 struct pinctrl_dev *pctldev;
0161 const char *name;
0162 bool dynamic_name;
0163 void *drv_data;
0164
0165 #ifdef CONFIG_PINMUX
0166 unsigned mux_usecount;
0167 const char *mux_owner;
0168 const struct pinctrl_setting_mux *mux_setting;
0169 const char *gpio_owner;
0170 #endif
0171 };
0172
0173
0174
0175
0176
0177
0178
0179 struct pinctrl_maps {
0180 struct list_head node;
0181 const struct pinctrl_map *maps;
0182 unsigned num_maps;
0183 };
0184
0185 #ifdef CONFIG_GENERIC_PINCTRL_GROUPS
0186
0187
0188
0189
0190
0191
0192
0193
0194 struct group_desc {
0195 const char *name;
0196 int *pins;
0197 int num_pins;
0198 void *data;
0199 };
0200
0201 int pinctrl_generic_get_group_count(struct pinctrl_dev *pctldev);
0202
0203 const char *pinctrl_generic_get_group_name(struct pinctrl_dev *pctldev,
0204 unsigned int group_selector);
0205
0206 int pinctrl_generic_get_group_pins(struct pinctrl_dev *pctldev,
0207 unsigned int group_selector,
0208 const unsigned int **pins,
0209 unsigned int *npins);
0210
0211 struct group_desc *pinctrl_generic_get_group(struct pinctrl_dev *pctldev,
0212 unsigned int group_selector);
0213
0214 int pinctrl_generic_add_group(struct pinctrl_dev *pctldev, const char *name,
0215 int *gpins, int ngpins, void *data);
0216
0217 int pinctrl_generic_remove_group(struct pinctrl_dev *pctldev,
0218 unsigned int group_selector);
0219
0220 #endif
0221
0222 struct pinctrl_dev *get_pinctrl_dev_from_devname(const char *dev_name);
0223 struct pinctrl_dev *get_pinctrl_dev_from_of_node(struct device_node *np);
0224 int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name);
0225 const char *pin_get_name(struct pinctrl_dev *pctldev, const unsigned pin);
0226 int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,
0227 const char *pin_group);
0228
0229 static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev,
0230 unsigned int pin)
0231 {
0232 return radix_tree_lookup(&pctldev->pin_desc_tree, pin);
0233 }
0234
0235 extern struct pinctrl_gpio_range *
0236 pinctrl_find_gpio_range_from_pin_nolock(struct pinctrl_dev *pctldev,
0237 unsigned int pin);
0238
0239 extern int pinctrl_force_sleep(struct pinctrl_dev *pctldev);
0240 extern int pinctrl_force_default(struct pinctrl_dev *pctldev);
0241
0242 extern struct mutex pinctrl_maps_mutex;
0243 extern struct list_head pinctrl_maps;
0244
0245 #define for_each_maps(_maps_node_, _i_, _map_) \
0246 list_for_each_entry(_maps_node_, &pinctrl_maps, node) \
0247 for (_i_ = 0, _map_ = &_maps_node_->maps[_i_]; \
0248 _i_ < _maps_node_->num_maps; \
0249 _i_++, _map_ = &_maps_node_->maps[_i_])