i.MX6ULL(十九) linux gpio子系统

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

一 简介

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 引脚就行了
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值