[Linux 基础] -- Pinctrl 子系统之一了解基础概念

一、Linux Pinctrl 子系统简介

在许多 soc 内部都包含有 pin 控制器,通过 pin 控制器的寄存器,我们可以配置一个或者一组引脚的功能和特性。在软件方面,Linux 内核提供了 pinctrl 子系统,目的是为了统一各 soc 厂商的 pin 脚管理。

二、Linux Pinctrl 子系统提供的功能

1、管理系统中所有的可以控制的 pin,在系统初始化的时候,枚举所有可以控制的 pin, 并标识这些 pin。

2、管理这些 pin 的复用(Multiplexing)。对于 SOC 而言,其引脚除了配置成普通的 GPIO 之外,若干个引脚还可以组成一个 pin group,形成特定的功能。pin control subsystem 要管理所有的 pin group。

3、配置这些 pin 的特性。例如使能或者关闭引脚上的 pull-up、pull-down 电阻,配置引脚的 driver strength。

三、Pinctrl 相关概念

普通 driver 调用 pin control subsystem 的主要目标有两个:

1、设定该设备的功能复用;

2、设定该 device 对应的 pin 的电气特性。

设定设备的功能复用需要了解两个概念,一个是 function ,另外一个是 pin group。function 是功能抽象,对应一个 HW 逻辑 block,例如 SPI0。虽然给定了具体的 function name,我们并不能确定其使用的 pins 的情况。例如为了设计灵活,芯片内部的 SPI0 的功能引出到 pin group {C6,C7,C8,C9},也可能引出到另外一个 pin group {C22,C23,C24,C25},但毫无疑问,这两个 pin group 不能同时 active,毕竟芯片内部的 SPI0的逻辑功能电路只有一个,因此只有给出 function selector 以及function 的 pin group selsector 才能进行 function mux 的设定。

此外,由于电源管理的要求,某个 device 可能处于某个电源管理状态,例如 idle 或者 sleep,这时候,属于 device 的所有 pin 就会需要处于另外的状态。

综合上述的需求,就定义了 pin control state 的概念,也就是说设备可能处于非常多的状态中的一个,device driver 可以切换设备处于的状态。为了方便管理 pin control state。就有了 pin control state holder 的概念,用来管理一个设备的所有 pin control 状态。

综上所述,普通的 driver 调用 pin control subsystem 的接口就是只有三个步骤:

1、驱动加载或是运行时,获取 pin control state holder 的句柄;

2、设定 pin control 状态;

3、驱动卸载或是退出时,释放 pin control state holder de 句柄;

猜你喜欢

转载自blog.csdn.net/u014674293/article/details/105836432
今日推荐