0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef __LINUX_PINCTRL_PINCTRL_H
0012 #define __LINUX_PINCTRL_PINCTRL_H
0013
0014 #include <linux/radix-tree.h>
0015 #include <linux/list.h>
0016 #include <linux/seq_file.h>
0017 #include <linux/pinctrl/pinctrl-state.h>
0018 #include <linux/pinctrl/devinfo.h>
0019
0020 struct device;
0021 struct pinctrl_dev;
0022 struct pinctrl_map;
0023 struct pinmux_ops;
0024 struct pinconf_ops;
0025 struct pin_config_item;
0026 struct gpio_chip;
0027 struct device_node;
0028
0029
0030
0031
0032
0033
0034
0035 struct pingroup {
0036 const char *name;
0037 const unsigned int *pins;
0038 size_t npins;
0039 };
0040
0041
0042 #define PINCTRL_PINGROUP(_name, _pins, _npins) \
0043 (struct pingroup){ \
0044 .name = _name, \
0045 .pins = _pins, \
0046 .npins = _npins, \
0047 }
0048
0049
0050
0051
0052
0053
0054
0055
0056 struct pinctrl_pin_desc {
0057 unsigned number;
0058 const char *name;
0059 void *drv_data;
0060 };
0061
0062
0063 #define PINCTRL_PIN(a, b) { .number = a, .name = b }
0064 #define PINCTRL_PIN_ANON(a) { .number = a }
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078 struct pinctrl_gpio_range {
0079 struct list_head node;
0080 const char *name;
0081 unsigned int id;
0082 unsigned int base;
0083 unsigned int pin_base;
0084 unsigned int npins;
0085 unsigned const *pins;
0086 struct gpio_chip *gc;
0087 };
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108 struct pinctrl_ops {
0109 int (*get_groups_count) (struct pinctrl_dev *pctldev);
0110 const char *(*get_group_name) (struct pinctrl_dev *pctldev,
0111 unsigned selector);
0112 int (*get_group_pins) (struct pinctrl_dev *pctldev,
0113 unsigned selector,
0114 const unsigned **pins,
0115 unsigned *num_pins);
0116 void (*pin_dbg_show) (struct pinctrl_dev *pctldev, struct seq_file *s,
0117 unsigned offset);
0118 int (*dt_node_to_map) (struct pinctrl_dev *pctldev,
0119 struct device_node *np_config,
0120 struct pinctrl_map **map, unsigned *num_maps);
0121 void (*dt_free_map) (struct pinctrl_dev *pctldev,
0122 struct pinctrl_map *map, unsigned num_maps);
0123 };
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150 struct pinctrl_desc {
0151 const char *name;
0152 const struct pinctrl_pin_desc *pins;
0153 unsigned int npins;
0154 const struct pinctrl_ops *pctlops;
0155 const struct pinmux_ops *pmxops;
0156 const struct pinconf_ops *confops;
0157 struct module *owner;
0158 #ifdef CONFIG_GENERIC_PINCONF
0159 unsigned int num_custom_params;
0160 const struct pinconf_generic_params *custom_params;
0161 const struct pin_config_item *custom_conf_items;
0162 #endif
0163 bool link_consumers;
0164 };
0165
0166
0167
0168 extern int pinctrl_register_and_init(struct pinctrl_desc *pctldesc,
0169 struct device *dev, void *driver_data,
0170 struct pinctrl_dev **pctldev);
0171 extern int pinctrl_enable(struct pinctrl_dev *pctldev);
0172
0173
0174 extern struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
0175 struct device *dev, void *driver_data);
0176
0177 extern void pinctrl_unregister(struct pinctrl_dev *pctldev);
0178
0179 extern int devm_pinctrl_register_and_init(struct device *dev,
0180 struct pinctrl_desc *pctldesc,
0181 void *driver_data,
0182 struct pinctrl_dev **pctldev);
0183
0184
0185 extern struct pinctrl_dev *devm_pinctrl_register(struct device *dev,
0186 struct pinctrl_desc *pctldesc,
0187 void *driver_data);
0188
0189 extern void devm_pinctrl_unregister(struct device *dev,
0190 struct pinctrl_dev *pctldev);
0191
0192 extern void pinctrl_add_gpio_range(struct pinctrl_dev *pctldev,
0193 struct pinctrl_gpio_range *range);
0194 extern void pinctrl_add_gpio_ranges(struct pinctrl_dev *pctldev,
0195 struct pinctrl_gpio_range *ranges,
0196 unsigned nranges);
0197 extern void pinctrl_remove_gpio_range(struct pinctrl_dev *pctldev,
0198 struct pinctrl_gpio_range *range);
0199
0200 extern struct pinctrl_dev *pinctrl_find_and_add_gpio_range(const char *devname,
0201 struct pinctrl_gpio_range *range);
0202 extern struct pinctrl_gpio_range *
0203 pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev,
0204 unsigned int pin);
0205 extern int pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
0206 const char *pin_group, const unsigned **pins,
0207 unsigned *num_pins);
0208
0209 #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_PINCTRL)
0210 extern struct pinctrl_dev *of_pinctrl_get(struct device_node *np);
0211 #else
0212 static inline
0213 struct pinctrl_dev *of_pinctrl_get(struct device_node *np)
0214 {
0215 return NULL;
0216 }
0217 #endif
0218
0219 extern const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev);
0220 extern const char *pinctrl_dev_get_devname(struct pinctrl_dev *pctldev);
0221 extern void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev);
0222
0223 #endif