Hi3519-pinctrl驱动开发④pinctrl driver接口
来源:互联网 发布:好用的免费域名 编辑:程序博客网 时间:2024/06/17 14:06
首先看一下pinctrl driver的描述符struct pinctrl_desc结构体的定义:
struct pinctrl_desc { const char *name;---本控制器名称 struct pinctrl_pin_desc const *pins;---本控制器所控制的所有pins的数组 unsigned int npins;---pins数组中元素的个数 const struct pinctrl_ops *pctlops;---pin control全局函数表 const struct pinmux_ops *pmxops;---pinmux操作函数表 const struct pinconf_ops *confops;---pin config操作函数表 struct module *owner;};
创建一个pinctrl驱动就需要创建一个pinctrl_desc对象。一个pinctrl driver需要管理一堆pins,这些pins就是pinctrl_desc结构体中的pins数组,pins中每一个pin的元素类型为struct pinctrl_pin_desc,定义如下:
struct pinctrl_pin_desc { unsigned number; const char *name; void *drv_data;};
number用于描述该引脚的编号,name描述引脚名称,drv_data是pinctrl驱动自定义的数据,pinctrl sub system不会理会这个数据。
struct pinctrl_ops中各个callback函数的具体的解释如下:
1、get_groups_count:该pin controller支持多少个pin group。pin group的定义可以参考本文关于pin controller的功能规格中的描述。注意不要把pin group和IO port的硬件分组搞混了。例如:S3C2416有138个I/O 端口,分成11组,分别是gpa~gpl,这个组并不叫pin group,而是叫做pin bank。pin group是和特定功能(例如SPI、I2C)相关的一组pin。
2、get_group_name:给定一个selector(index),获取指定pin group的name
3、get_group_pins:给定一个selector(index),获取该pin group中pin的信息(该pin group包括多少个pin,每个pin的ID是什么)
4、pin_dbg_show debug:fs的callback接口
5、dt_node_to_map:分析一个pin configuration node并把分析的结果保存成mapping table entry,每一个entry表示一个setting(一个功能复用设定,或者电气特性设定)
6、dt_free_map:dt_node_to_map函数的逆函数
复用引脚相关的操作函数的具体解释如下:
1、request:pin control core进行具体的复用设定之前需要调用该函数,主要是用来请底层的driver判断某个引脚的复用设定是否是可行的。
2、free:是request的逆函数。调用request函数请求占用了某些pin的资源,调用free可以释放这些资源。
3、get_functions_count:获取pin controller支持的function的数目
4、get_function_name:给定一个selector(index),获取指定function的name
5、get_function_groups:给定一个selector(index),获取指定function的pin groups信息
6、set_mux:使能一个特定的mux function,使用一个给定的group selector
7、gpio_request_enable:申请并使能一个pin的GPIO功能
8、gpio_disable_free:释放pin并关闭pin的GPIO功能
9、gpio_set_direction:设置GPIO的方向
配置引脚的特性的struct pinconf_ops数据结构的各个成员定义如下:
1、pin_config_get:给定一个pin ID以及config type ID,获取该引脚上指定type的配置。
2、pin_config_set:设定一个指定pin的配置
3、pin_config_group_get:以pin group为单位,获取pin上的配置信息
4、pin_config_group_set:以pin group为单位,设定pin group的特性配置
一个pinctrl driver需要实现上面pinctrl_ops、pinmux_ops、pinconf_ops 接口函数。
- Hi3519-pinctrl驱动开发④pinctrl driver接口
- Hi3519-pinctrl驱动开发③consumer driver与pinctrl子系统交互
- Hi3519-pinctrl驱动开发①开发环境搭建
- Hi3519-pinctrl驱动开发②创建mapping table
- pinctrl
- linux pinctrl驱动
- 设备驱动中的pinctrl(kernel-4.7)
- PINCTRL子系统
- PINCTRL子系统
- PINCTRL介绍
- pinctrl [1]
- linux PINCTRL
- pinctrl 文档
- PINCTRL代码
- 使能MT7620的第二个SPI接口(cs1)——兼谈pinmux与pinctrl驱动
- Linux内核移植 part3:pinctrl和gpio驱动
- Pinctrl基础简介
- linux pinctrl 文档
- C++多文件间函数调用及全局变量共享问题
- java多线程之sleep()跟wait()的区别
- linux安装oracle数据库时出现 No protocol specified
- 本地Apache服务器配置及Android模拟器的调试
- 使用SQL developer 导出与导入Oracle数据库与表的数据
- Hi3519-pinctrl驱动开发④pinctrl driver接口
- 自定义控件三部曲之动画篇(五)——ValueAnimator高级进阶(一)
- Http中200、302、304、404和500等响应状态码所表示的意义?
- 【Netty源码】read、write与accept源码剖析
- 你好Haskell (1) 环境搭建和简单玩玩
- 1
- Tensorflow 实现二分类
- 77. Combinations
- spring boot之解决懒加载session was closed问题