pinctrl_desc函数操作集

news2024/10/6 0:30:48

pinctrl_desc函数操作集


文章目录

  • pinctrl_desc函数操作集
  • 操作集原型
  • struct pinctrl_ops
  • struct pinctrl_ops
  • struct pinconf_ops


在这里插入图片描述

操作集原型

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: 调试时显示驱动程序的引脚配置参数。
这些函数指针定义了与引脚配置相关的操作,并提供了对引脚配置的获取、设置和调试显示功能的支持。通过使用这些函数指针,可以在结构体外部实现这些操作的具体逻辑,并将其与引脚控制器相关联

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/845841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式异步任务组件(八)

分布式异步任务组件网络通信线程模型设计-- 大概说一下功能场景: 从节点和主节点建立连接,负责和主节点的网络IO通信,通信动作包括投票,心跳,举证等,步骤为读取主节点的信息,写入IO队列中&…

Kotlin基础(十一):反射和注解

前言 本文主要讲解kotlin反射和注解。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 kotlin反射 1.1.1 kotlin反射概念和常见使用场景 在Kotlin中,反射是一种能够在运行时动态地获取、检查和操作类、属性、方法等结构的能力。Kotlin为反射提供了一…

vue新学习 05vue的创建运行原理

01.vue的创建过程 Vue的生命周期是指Vue实例从创建到销毁的整个过程中经历的一系列阶段。Vue的生命周期分为8个阶段,分别是: beforeCreate(创建前):在实例初始化之后,数据观测和事件配置之前被调用。此时…

后台管理系统中----菜单的展开和收起

1.下载vuex npm i vuex3.6.2 2.创建文件夹 src/store/index import Vue from "vue"; import Vuex from "vuex"; Vue.use(Vuex); import tab from "./tab"; export default new Vuex.Store({modules: {tab,}, });注册Vuex并且注册tab模块 来控…

Spring系列三:基于注解配置bean

文章目录 💗通过注解配置bean🍝基本介绍🍝快速入门🍝注意事项和细节 💗自己实现Spring注解配置Bean机制🍝需求说明🍝思路分析🍝注意事项和细节 💗自动装配 Autowired&…

RISC-V基础之内存分布与映射

内存映射是指将地址空间划分为不同的部分或段,每个段有不同的用途和属性。这段话介绍了五个段:文本段、全局数据段、动态数据段、异常处理器段和操作系统(OS)段。下面是对每个段的简要说明: 文本段:存放程序…

cookie、sessionStorage、localStorage的使用介绍,通过localStorage保存当前菜单、已打开菜单

这篇文章主要介绍前端常用的几种存储技术cookie、storage(sessionStorage、localStorage)的简单介绍和使用方法。 一、cookie 1、在JavaScript中使用cookie 使用原生的cookie // 设置cookie document.cookie "nameTom;age18;";// 获取coo…

使用Python和wxPython构建中文OCR截图工具

引言: 随着数字化时代的到来,我们经常需要从图像中提取文本信息。而在处理中文文本时,OCR(Optical Character Recognition,光学字符识别)技术发挥着重要作用。本文将介绍如何使用Python编程语言和wxPython图…

powershell几句话设置环境变量

设置环境变量比较繁琐,现在用这段话,在powershell中就可以轻松完成。 $existingPath [Environment]::GetEnvironmentVariable("Path", "Machine") $newPath "C:\Your\Path\Here"if ($existingPath -split ";"…

ORACLE常用基础

. 1.oracle开机启动流程 su - oracle lsnrctl start lsnrctl status sqlplus / as sysdba startup 2、如何查看数据库版本 select * from v$version; 3.如何查看用户从那个设备连接的数据库 SELECT DISTINCT machine , terminal FROM V$SESSION; 4.如何查看表结构 selec…

【严重】Apache Airflow Run Task 权限绕过漏洞

漏洞描述 Airflow 是一个开源的工作流自动化平台,它允许用户定义、调度和监视工作流任务的执行。Run Task 是通过 Airflow 的 Web 界面或命令行工具。 在 Airflow 受影响版本中,Run Task 功能允许用户手动触发执行特定的任务,而不受正常的任…

CASAIM与迈普医学合作,基于CT数据三维重建和设计,在医疗辅具研究开发中实现高精度三维建模和偏差比对

近期,CASAIM与广州迈普再生医学科技股份有限公司(简称:迈普医学)合作,基于CT数据三维重建和设计,在医疗辅具研究开发中实现高精度三维建模和偏差比对,实现与缺损区域的精确匹配。 迈普医学&…

全新二开美化版UI好看的社区源码下载/反编译版

2023全新二开美化版UI精美的社区源码下载/反编译版 之前我分享过Rule原版,相信大家已经有很多人搭建好了。这次我要分享的是RuleAPP的二开美化版(请尊重每个作者的版权),这个版本没有加密,可以进行反编译,…

C#实现SqlServer数据库同步

实现效果: 设计思路: 1. 开启数据库及表的cdc,定时查询cdc表数据,封装sql语句(通过执行类型,主键;修改类型的cdc数据只取最后更新的记录),添加到离线数据表; 2. 线程定时查询离线数据表&#xf…

访问器模式(C++)

定义 表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。 应用场景 在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接…

分布式理论之CAP与BASE

分布式理论之CAP与BASE 一、什么是CAP1. 一致性(Consistency):2. 可用性(Availability):3. 分区容错性(Partition tolerance):4. CAP小结: 二、AP&CP如何…

通向架构师的道路之weblogic与apache的整合与调优

一、BEAWeblogic的历史 BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、 网络应用和数据库应 用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的 开发、集成、部署和管理之中。 BEA WebLogic Server拥有处理关键Web应…

气味传感器

本文将通过图文及视频的形式为各位介绍太阳诱电因应市场需求而开发的气味传感器产品。高浓度端采用QCM型,较低浓度端采用MEMS半导体型。另外还准备有FBAR型转换器。 太阳诱电为实现高灵敏度感应而开发了3款转换器。  高浓度端采用QCM型,较低浓度端采用…

python excel 操作

excel文件内容如下: 一、xlrd 读Excel 操作 1、打开Excel文件读取数据 filexlrd.open_workbook(filename)#文件名以及路径,如果路径或者文件名有中文给前面加一个 r 2、常用函数 (1)获取一个sheet工作表 table file.sheets(…

LeetCode 热题 100 JavaScript--234. 回文链表

function ListNode(val, next) {this.val val undefined ? 0 : val;this.next next undefined ? null : next; }var isPalindrome function (head) {if (!head || !head.next) {return true; }// 使用快慢指针法找到链表的中间节点let slow head;let fast head;while …