Bootstrap

pinctrl学习笔记---重要结构体

pincontroller数据结构

pinctrl的作用:
1.引脚枚举和命名
2.引脚复用,比如用作GPIO、I2C或其他功能
3.引脚配置,比如上拉、下拉、open drain、驱动强度等

~/include/linux/pinctrl/pinctrl.h

struct pinctrl_desc {
   
	const char *name;
	const struct pinctrl_pin_desc *pins;
	unsigned int npins;
	const struct pinctrl_ops *pctlops;
	const struct pinmux_ops *pmxops;
	const struct pinconf_ops *confops;
	struct module *owner;
#ifdef CONFIG_GENERIC_PINCONF
	unsigned int num_custom_params;
	const struct pinconf_generic_params *custom_params;
	const struct pin_config_item *custom_conf_items;
#endif
	bool link_consumers;
};

~/include/linux/pinctrl/pinctrl.h

struct pinctrl_pin_desc {
   
	unsigned number;
	const char *name;
	void *drv_data;
};

~/include/linux/pinctrl/pinctrl.h

struct pinctrl_ops {
   
	int (*get_groups_count) (struct pinctrl_dev *pctldev);
	const char *(*get_group_name) (struct pinctrl_dev *pctldev,
				       unsigned selector);
	int (*get_group_pins) (struct pinctrl_dev *pctldev,
			       unsigned selector,
			       const unsigned **pins,
			       unsigned *num_pins);
	void (*pin_dbg_show) (struct pinctrl_dev *pctldev, struct seq_file *s,
			  unsigned offset);
	int (*dt_node_to_map) (struct pinctrl_dev *pctldev,
			       struct device_node *np_config,
			       struct pinctrl_map **map, unsigned *num_maps);
	void (*dt_free_map) (struct pinctrl_dev *pctldev,
			     struct pinctrl_map *map, unsigned num_maps);
};

~/include/linux/pinctrl/pinmux.h

struct pinmux_ops {
   
	int (*request) (struct pinctrl_dev *pctldev, unsigned offset);
	int (*free) (struct pinctrl_dev *pctldev, unsigned offset);
	int (*<
;