《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记
文章目录
- GPIO 控制器
- 必要属性
- 其他属性
- 指定 GPIO 引脚
和时钟类似,GPIO 在设备树中也存在两层定义,首先是 GPIO 控制器,这部分由芯片原厂工程师编写,相当于 GPIO 底层引脚定义;另一层则是用户引用的部分,一般用于外设引脚配置。
以 iTOP-3568 的 GPIO 设备树为例:
GPIO 控制器
GPIO 控制器例子:
必要属性
在 GPIO 控制器中,必须有 #gpio-cells 和 gpio-controller 属性,
#gpio-cells 表示其他节点使用该 GPIO 控制器需要几个参数来表示使用的 GPIO,
gpio-controller 表示该节点是一个 GPIO 控制器。
其他属性
上面的例子中还用到了 gpio-ranges 属性
gpio-ranges <&x a b c> 可以把 GPIO 的 b ~ (b + c -1) pin 映射到 x 节点的 a ~ (a + c -1) pin,
比如上面例子的 gpio-ranges = <&pinctrl 0 0 32>;
表示将 GPIO 的 0 ~ 31 号 pin 脚映射到 pinctrl 的 0 ~ 31 号 pin 脚。
这里还有一个 GPIO 控制器的例子,里面除了有上面提到的三个 gpio 属性,还有 ngpios 属性,
ngpios 表示当前 GPIO 控制器下有多少个 pin 脚。
这里再介绍两个 GPIO 控制器属性:
gpio-reserved-ranges 用于指定保留的 pin 脚,例如 gpio-reserved-ranges <2 3>
表示当前 GPIO 控制器的 2,3,4 pin 脚为预留 pin,即第一个参数为起始 pin,第二个参数为 pin 脚数量。
gpio-line-names 用于给 GPIO 控制器的 pin 脚命名,控制器有多少 pin,就有多少个名字,名字用逗号隔开。
指定 GPIO 引脚
在设备树中给外设分配 GPIO 时,需要指定特定的 GPIO 引脚,指定的格式由 GPIO 控制器决定,
例如 iTOP-3568 设备树中 work 节点中 GPIO pin 定义:
“gpios” 是一个自定义属性,有三个参数(参数个数由 GPIO 控制器中的 #gpio-cells = <2>
决定),参数的顺序和含义是由平台决定,这里指定 gpios 为 gpio0 控制器下的第 RK_PB7 pin(其实就是 GPIO0_B7),电平为 GPIO_ACTIVE_HIGH。
这里有个小疑问,#gpio-cells = <2>,网上资料基本都说 gpio 属性应该有两个 32 位参数,但 gpio 属性不是有三个参数吗?难道 &gpio0 和 RK_PB7 算一个参数?