一 简介
pinctrl
子系统重点是设置
PIN(
有的
SOC
叫做
PAD)
的复用 和电气属性,
如果 pinctrl
子系统将一个
PIN
复用为
GPIO
的话,那么接下来就要用到
gpio
子系 统了。gpio
子系统顾名思义,就是用于初始化
GPIO
并且提供相应的
API
函数,比如设置
GPIO
为输入输出,读取
GPIO
的值等。
gpio
子系统的主要目的就是方便驱动开发者使用
gpio
,驱动
开发者在设备树中添加
gpio
相关信息,然后就可以在驱动程序中使用
gpio
子系统提供的
API
函数来操作
GPIO
,
Linux
内核向驱动开发者屏蔽掉了
GPIO
的设置过程,极大的方便了驱动开
发者使用
GPIO
。
1.1、设备树中的 gpio 信息
一种设备的节点属性设置都会有一些套路,查询内核中的文档,比如Documentation/devicetree/bindings/i2c/i2c-imx.txt就描述了imx平台的i2c属性设置方法
I.MX6ULL-ALPHA
开发板上的
UART1_RTS_B
做为
SD
卡的检测引脚,
UART1_RTS_B
复
用为
GPIO1_IO19
,通过读取这个
GPIO
的高低电平就可以知道
SD
卡有没有插入。
首先肯定是
将
UART1_RTS_B
这个
PIN
复用为
GPIO1_IO19
,并且设置电气属性,也就是上一小节讲的
pinctrl
节点。打开
imx6ull-alientek-emmc.dts
,
UART1_RTS_B
这个
PIN
的
pincrtl
设置如下:
示例代码 45.2.2.1 SD 卡 CD 引脚 PIN 配置参数
316 pinctrl_hog_1: hoggrp-1 {
317 fsl,pins = <
318 MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */
......
322 >;
323 };
pinctrl
配置好以后就是设置
gpio
了,
SD
卡驱动程序通过读取
GPIO1_IO19
的值来判断
SD
卡有没有插入,但是
SD
卡驱动程序怎么知道
CD
引脚连接的
GPIO1_IO19
呢?肯定是需要设
备树告诉驱动啊!在设备树中
SD
卡节点下添加一个属性来描述
SD
卡的
CD 引脚就行了
<
Linux内核中的GPIO子系统与pinctrl子系统解析

文章详细介绍了Linux内核中的pinctrl子系统和GPIO子系统的作用,以及如何在设备树中配置GPIO信息。pinctrl用于设置PIN的复用和电气属性,而GPIO子系统则提供API供驱动开发者初始化和操作GPIO。在设备树中,通过特定属性如`cd-gpios`来指定GPIO的使用,并通过`gpio_request`等API进行GPIO的申请、方向设置和值的读写。文章还展示了设备树配置GPIO的例子。
最低0.47元/天 解锁文章
2765

被折叠的 条评论
为什么被折叠?



