PINCTRL
介绍 PIN 的功能和使用方法。
模块介绍
PINCTRL 是 PIN模块的控制器。
功能介绍

Linux pinctrl模块包括两部分: pinctrl core 和 pin 控制器驱动。
-
pinctrl core 主要有两个功能:
- 提供 pinctrl 功能接口给其它驱动使用
- 提供 pin 控制器设备注册与注销接口
-
pinctrl 控制器驱动 主要功能:
- 驱动 pin 控制器硬件
- 实现 pin 的管理和配置
源码结构介绍
控制器驱动代码在 drivers/pinctrl 目录下:
drivers/pinctrl
|-- pinctrl-single.c
关键特性
| 特性 | 特性说明 |
|---|---|
| 支持pin复用选择 | 支持将pin设置成复用功能中一种 |
| 支持设置pin的属性 | 支持设置pin的边沿检测、上下拉和驱动能力 |
配置介绍
主要包括 驱动使能配置 和 dts配置
CONFIG配置
- CONFIG_PINCTRL: 为 pin 控制器提供支持,默认值为
Y
Device Drivers
Pin controllers (PINCTRL [=y])
- CONFIG_PINCTRL_SINGLE: 为 K1 pinctrl 控制器提供支持,默认值为
Y
Device Drivers
Pin controllers (PINCTRL [=y])
One-register-per-pin type device tree based pinctrl driver (PINCTRL_SINGLE [=y])
pin使用说明
介绍在dts设备节点里使用pin。
pin 配置参数
对 pin id、复用功能 和 属性 进行定义。
详细定义内核目录 include/dt-bindings/pinctrl/k1-x-pinctrl.h。
pin id
即 pin 编号。
K1 pin 编号范围 1~147,对应宏定义 GPIO_00 ~ GPIO_127。
pin 功能
K1 pin 支持复用选择。
K1 pin 复用功能列表见 K1 Pin Multiplex。
pin 的复用功能号为 0~7,分别定义为 MUX_MODE0 ~ MUX_MODE7。
pin 属性
pin 的属性包括 边沿检测、上下拉 和 驱动能力。
边沿检测
采用功能 pin 唤醒系统时,设置产生唤醒事件的信号检测方式。
支持如下四种模式:
- 边沿检测关闭:
EDGE_NONE - 上升沿检测:
EDGE_RISE - 下降沿检测:
EDGE_FALL - 上升和下降沿:
EDGE_BOTH
上下拉
支持如下三种模式:
- 上下拉禁止:
PULL_DIS - 上拉:
PULL_UP - 下拉:
PULL_DOWN
驱动能力
-
pin 电压为 1.8V: 分为 4 级,值越大,驱动能力越强。
- PAD_1V8_DS0
- PAD_1V8_DS1
- PAD_1V8_DS2
- PAD_1V8_DS3
-
pin 电压为 3.3V: 分为 7 级,值越大,驱动能力越强。
- PAD_3V_DS0
- PAD_3V_DS1
- PAD_3V_DS2
- PAD_3V_DS3
- PAD_3V_DS4
- PAD_3V_DS5
- PAD_3V_DS6
- PAD_3V_DS7
pin 配置定义
单个 pin 配置
选定 pin 功能,设置 pin 的边沿检测,上下拉和驱动能力。
采用宏 K1X_PADCONF 进行设置, 格式为 pin_id, mux_mode, pin_config
示例:将 pin GPIO_00 设置为 gmac0 rxdv 功能,且关闭边沿检测,关闭上下拉,驱动能力设置为 2 (1.8V)。
查看 K1 pin 功能复用列表 K1 Pin Multiplex,GPIO_00 要设置成 gmac0 rxdv 功能,需要设置功能模式为 1, 即 MUX_MODE1。
设置如下:
K1X_PADCONF(GPIO_00, MUX_MODE1, (EDGE_NONE | PULL_DIS | PAD_1V8_DS2)) /* gmac0_rxdv */