Official Document

Documentation\devicetree\bindings\gpio\gpio.txt

Documentation\gpio\Pinctrl-bindings.txt

Documentation\devicetree\bindings\Pinctrl\Pinctrl-bindings.txt

1. Pincontrol and GPIO Subsystem Synopsis

Pincontrol:是控制使用那些引脚复用为什么功能模块,怎么配置这个引脚。相当于IOMUX功能

GPIO Subsystem:是具体配置引脚的信息

使用方法:
指定节点的配置Pincontrol使用状态(status),Pincontrol状态(pinctrol-name),Pincontrol状态引用的GPIO Subsystem配置(pinctrl-x)

编写GIOP Subsystem配置信息

其中4、5、6步骤为GPIO Subsystem实现

2. GPIO Subsystem

关于GPIO Subsystem存在已下两个属性

gpio-controller;
#gpio-cells = <2>

gpio-controller表示这个节点是GPIO Controller

#gpio-cells = <2>则表示此控制器每个引脚需要2个32位的数来表示。常见用法为一个cell表示引脚,一个cell表示有效电平

GPIO_ACTIVE_HIGH	:	高电平有效
GPIO_ACTIVE_LOW		:	低电平有效

GPIO Controller的定义是原厂的工作,我们使用时使用[<name>-]gpios去声明引脚就ok了

reset-gpios = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>;

2.1 Linux中操作GIPO Subsystem

在驱动中存在两套操作GPIO子系统的接口:基于操作符(descriptor-base);老一套(legacy)

这里只使用基于操作符这一套

2.1.1 基于操作符(descriptor-base)

带有gpiod_前缀,它使用gpio_desc结构体表示一个引脚

头文件

#include <linux/gpio/consumer.h> // descriptor-based

常用函数

gpiod_get 设备树节点中只存在单个引脚时使用 power-gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
gpiod_get_index 设备树节点中存在多个引脚时使用 led-gpios = <&gpio 15 GPIO_ACTIVE_HIGH>, <&gpio 16 GPIO_ACTIVE_HIGH>, <&gpio 17 GPIO_ACTIVE_HIGH>;
gpiod_get_array
devm_gpiod_get 含有devm表示设备资源管理器。此类函数是一种自动释放资源的机制。当设备不存在时资源便会自动释放。使用devm申请内存时,如果失败可以直接返回。设备的销毁函数会自动释放已经申请的GPIO(推荐使用)
devm_gpiod_get_index
devm_gpiod_get_array
gpiod_direction_input
gpiod_direction_output
gpiod_get_value 此处获取值为逻辑值,并非实际值
gpiod_set_value 此处设置值为逻辑值,并非实际值。生效值可以在设备树中进行调整。这样可以确保函数的适配性
gpiod_put
gpiod_put_array
devm_gpiod_put
devm_gpiod_put_array

2.2 GPIO命令行操作

echo 111 > /sys/class/gpio/export				# 创建相关的file
echo in > /sys/class/gpio/gpio111/direction		# 设置方向为in还out
echo 1 > /sys/class/gpio/gpio111/value			# 设置值
echo 111 > /sys/class/gpio/unexport				# 删除相关文件

原文地址:http://www.cnblogs.com/burnk/p/16908703.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性