上一节我们了解了Pinctrl子系统主要的数据结构,要想更好的掌握Pinctrl子系统,还需要知道他的构造过程。
本节我们就来分析一下Pinctrl子系统的构造过程。
以内核面向对象的思想,设备树可以分为两部分,左边是Pinctrl子系统节点,用来描述Pincontroller,右边是使用Pincontroller的设备,本节我们就来分析左边Pinctrller的构造过程。
学习Pinctrl子系统时,抓住他的三大作用,就可以比较清楚的分析。
- 引脚的枚举与命名;
- 引脚复用;
- 引脚配置;
本节主要说明引脚的枚举与命名,他会涉及两种情况:单个引脚,多个引脚(group)。
以imx6ull为例。
单个引脚
根据 imx6ull 设备树中,Pinctrl 节点的 compatible 属性,可以找到对应的驱动文件。
对应的驱动文件是 pinctrl-imx6ul.c,对应的probe函数是 imx6ul_pinctrl_probe 函数。
从probe函数开始,分析一下处理流程:
data 如下,他有 pins 和 npins 成员,分表描述 单个引脚 和 引脚个数。
imx6ul_pinctrl_pads 是一个结构体数组