pinctrl_desc函数操作集

pinctrl_desc函数操作集



在这里插入图片描述

操作集原型

pinctrl_desc结构体中包含下列函数操作集

 /* 引脚控制操作的虚拟函数表,用于支持引脚分组等全局概念,这是可选的 */
    const struct pinctrl_ops *pctlops;
    /* 引脚复用操作的虚拟函数表,如果驱动程序支持引脚复用 */
    const struct pinmux_ops *pmxops;
    /* 引脚配置操作的虚拟函数表,如果驱动程序支持引脚配置 */
    const struct pinconf_ops *confops;

初始化 imx_pinctrl_desc时得知函数操作集为imx_pctrl_ops,imx_pmx_ops,imx_pinconf_ops

// 初始化 imx_pinctrl_desc
imx_pinctrl_desc->name = dev_name(&pdev->dev);
imx_pinctrl_desc->pins = info->pins;
imx_pinctrl_desc->npins = info->npins;
imx_pinctrl_desc->pctlops = &imx_pctrl_ops;
imx_pinctrl_desc->pmxops = &imx_pmx_ops;
imx_pinctrl_desc->confops = &imx_pinconf_ops;
imx_pinctrl_desc->owner = THIS_MODULE;

struct pinctrl_ops

pinctrl_ops

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);
    /* 在debugfs中显示特定引脚的设备信息的可选调试显示钩子 */
    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);
    /* 释放通过dt_node_to_map创建的映射表项 */
    void (*dt_free_map) (struct pinctrl_dev *pctldev,
                 struct pinctrl_map *map, unsigned num_maps);
};

这是一个名为pinctrl_ops的结构体,它包含了一组函数指针成员。这些函数指针定义了一组操作,用于对引脚控制器进行配置和管理。下面是该结构体的成员及其功能的概括总结:
get_groups_count: 获取已注册的总组数。
get_group_name: 获取给定选择器的组名。
get_group_pins: 获取给定选择器的引脚数组和数组大小。
pin_dbg_show: 在debugfs中显示特定引脚的设备信息的可选调试显示钩子。
dt_node_to_map: 解析设备树的“引脚配置节点”,并创建映射表项。
dt_free_map: 释放通过dt_node_to_map创建的映射表项。
这些函数指针定义了与引脚控制器相关的操作,并提供了对引脚配置、设备信息显示等功能的支持。通过使用这些函数指针,可以在结构体外部实现这些操作的具体逻辑,并将其与引脚控制器相关联。

struct pinctrl_ops

pinctrl_ops

struct pinmux_ops {
/* pinmux操作,由支持引脚复用的引脚控制器驱动程序实现 */
int (*request) (struct pinctrl_dev pctldev, unsigned offset); / 请求特定引脚是否可用于复用 */
int (*free) (struct pinctrl_dev pctldev, unsigned offset); / request()回调的相反函数,释放已请求的引脚 */
int (*get_functions_count) (struct pinctrl_dev pctldev); / 返回此pinmux驱动程序中可选择的命名函数数量 */
const char *(*get_function_name) (struct pinctrl_dev pctldev, unsigned selector); / 返回复用选择器的函数名称,用于将特定设备映射到复用设置 */
int (*get_function_groups) (struct pinctrl_dev *pctldev, unsigned selector, const char * const *groups, unsigned * const num_groups);
/
返回与特定函数选择器连接的一组组名(依次引用引脚) */
int (*set_mux) (struct pinctrl_dev pctldev, unsigned func_selector, unsigned group_selector); / 使用特定引脚组启用特定的复用功能 */
int (*gpio_request_enable) (struct pinctrl_dev *pctldev, struct pinctrl_gpio_range range, unsigned offset); / 在特定引脚上请求并启用GPIO */
void (*gpio_disable_free) (struct pinctrl_dev *pctldev, struct pinctrl_gpio_range range, unsigned offset); / 释放特定引脚上的GPIO复用 */
int (*gpio_set_direction) (struct pinctrl_dev *pctldev, struct pinctrl_gpio_range range, unsigned offset, bool input); /
由于控制器可能需要根据GPIO配置为输入或输出来进行不同的配置,因此可以实现方向选择器函数作为需要引脚复用的GPIO控制器的支持 */ };

这是一个名为pinmux_ops的结构体,它包含了一组函数指针成员。这些函数指针定义了一组操作,用于对引脚进行复用和配置。下面是该结构体的成员及其功能的概括总结:
request: 请求特定引脚是否可用于复用。
free: request() 回调的相反函数,释放已请求的引脚。
get_functions_count: 返回此pinmux驱动程序中可选择的命名函数数量。
get_function_name: 返回复用选择器的函数名称,用于将特定设备映射到复用设置。
get_function_groups: 返回与特定函数选择器连接的一组组名(依次引用引脚)。
set_mux: 使用特定引脚组启用特定的复用功能。
gpio_request_enable: 在特定引脚上请求并启用GPIO。
gpio_disable_free: 释放特定引脚上的GPIO复用。
gpio_set_direction: 由于控制器可能需要根据GPIO配置为输入或输出来进行不同的配置,因此可以实现方向选择器函数作为需要引脚复用的GPIO控制器的支持。
这些函数指针定义了与引脚复用和配置相关的操作,并提供了对引脚复用功能、GPIO请求和配置等功能的支持。通过使用这些函数指针,可以在结构体外部实现这些操作的具体逻辑,并将其与引脚控制器相关联。

struct pinconf_ops

pinconf_ops

struct pinconf_ops {
#ifdef CONFIG_GENERIC_PINCONF
    bool is_generic;  // 是否为通用的引脚配置
#endif
    int (*pin_config_get) (struct pinctrl_dev *pctldev,  // 获取特定引脚的配置
                   unsigned pin,  // 引脚编号
                   unsigned long *config);  // 配置信息
    int (*pin_config_set) (struct pinctrl_dev *pctldev,  // 配置单个引脚
                   unsigned pin,  // 引脚编号
                   unsigned long *configs,  // 配置信息数组
                   unsigned num_configs);  // 配置信息数量
    int (*pin_config_group_get) (struct pinctrl_dev *pctldev,  // 获取整个引脚组的配置
                     unsigned selector,  // 选择器
                     unsigned long *config);  // 配置信息
    int (*pin_config_group_set) (struct pinctrl_dev *pctldev,  // 配置整个引脚组
                     unsigned selector,  // 选择器
                     unsigned long *configs,  // 配置信息数组
                     unsigned num_configs);  // 配置信息数量
    int (*pin_config_dbg_parse_modify) (struct pinctrl_dev *pctldev,  // 调试时修改引脚配置
                       const char *arg,  // 参数
                       unsigned long *config);  // 配置信息
    void (*pin_config_dbg_show) (struct pinctrl_dev *pctldev,  // 调试时显示引脚信息
                     struct seq_file *s,  // 序列文件
                     unsigned offset);  // 偏移量
    void (*pin_config_group_dbg_show) (struct pinctrl_dev *pctldev,  // 调试时显示引脚组信息
                       struct seq_file *s,  // 序列文件
                       unsigned selector);  // 选择器
    void (*pin_config_config_dbg_show) (struct pinctrl_dev *pctldev,  // 调试时显示驱动程序的引脚配置参数
                        struct seq_file *s,  // 序列文件
                        unsigned long config);  // 配置信息
};

这是一个名为pinconf_ops的结构体,它包含了一组函数指针成员。这些函数指针定义了一组操作,用于对引脚的配置进行获取、设置和调试显示。下面是该结构体的成员及其功能的概括总结:
is_generic: 是否为通用的引脚配置(可选)。
pin_config_get: 获取特定引脚的配置。
pin_config_set: 配置单个引脚。
pin_config_group_get: 获取整个引脚组的配置。
pin_config_group_set: 配置整个引脚组。
pin_config_dbg_parse_modify: 调试时修改引脚配置。
pin_config_dbg_show: 调试时显示引脚信息。
pin_config_group_dbg_show: 调试时显示引脚组信息。
pin_config_config_dbg_show: 调试时显示驱动程序的引脚配置参数。
这些函数指针定义了与引脚配置相关的操作,并提供了对引脚配置的获取、设置和调试显示功能的支持。通过使用这些函数指针,可以在结构体外部实现这些操作的具体逻辑,并将其与引脚控制器相关联

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦梨甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值