往期内容
本专栏往期内容:
- Pinctrl子系统和其主要结构体引入
- Pinctrl子系统pinctrl_desc结构体进一步介绍
- Pinctrl子系统中client端设备树相关数据结构介绍和解析
- inctrl子系统中Pincontroller构造过程驱动分析:imx_pinctrl_soc_info结构体
- Pinctrl子系统中client端使用pinctrl过程的驱动分析
input子系统专栏:
- 专栏地址:input子系统
- input角度:I2C触摸屏驱动分析和编写一个简单的I2C驱动程序
– 末片,有往期内容观看顺序I2C子系统专栏:
- 专栏地址:IIC子系统
- 具体芯片的IIC控制器驱动程序分析:i2c-imx.c-CSDN博客
– 末篇,有往期内容观看顺序总线和设备树专栏:
- 专栏地址:总线和设备树
- 设备树与 Linux 内核设备驱动模型的整合-CSDN博客
– 末篇,有往期内容观看顺序
目录
1.回顾Pinctrl的三大作用
记住pinctrl的三大作用,有助于理解所涉及的数据结构:
-
引脚枚举与命名(Enumerating and naming)
- 单个引脚
- 各组引脚
-
引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能
-
引脚配置(Configuration):比如上拉、下拉、open drain、驱动强度等
Pinctrl子系统pinctrl_desc结构体进一步介绍
Pinctrl子系统中client端设备树相关数据结构介绍和解析
2.需要做什么
-
pin controller:
- 创建设备树节点
- 编写驱动程序
-
测试:
- 创建client设备树节点
- 编写驱动程序
3.硬件功能
假设这个虚拟的pin controller有4个引脚:
- pin0,1,2,3都可以配置为GPIO功能 — function 1
- pin0,1还可以配置为I2C功能 — function 2
- pin2,3还可以配置为UART功能 — function 3
4.编写设备树
Pincontroller:
virtual_pincontroller {
compatible = "XXX,virtual_pinctrl";
i2cgrp: i2cgrp {
functions = "i2c", "i2c";
groups = "pin0", "pin1";
configs = <0x11223344 0x55667788>;
};
};
client:
virtual_i2c {
compatible = "XXX,virtual_i2c";
pinctrl-names = "default";
pinctrl-0 = <&i2cgrp>;
};
5.编写Pinctrl驱动程序
5.1 核心:pinctrl_desc
- 分配pinctrl_desc结构体
- 设置pinctrl_desc结构体
- 注册pinctrl_desc结构体
5.2 辅助函数
\Linux-4.9.88\include\linux\of.h
标签:__,驱动程序,pin,pinctrl,virtual,Pinctrl,client,static,struct From: https://blog.csdn.net/caiji0169/article/details/143473255