高通GPIO驱动(DTS方式)
gpio调试的方式有很多,linux3.0以上ARM架构的处理器基本上都采用了DTS的方式,在linux3.0可以通过获取sysfs的方式来获取gpio状态;
sysfs文件系统的建立可以参照下面的博客:http://www.cnblogs.com/linhaostudy/p/8377895.html
一、GPIO的调试方法:
在Linux下,通过sysfs,获取gpio状态,也可以操作gpio。
1、获取gpio状态,实质上就是调用show函数
cd /sys/kernel/debug/
cat gpio
2、echo 'value' > value //设置gpio寄存器值
二、在kernel代码中操作gpio
在代码中有两种方式操作gpio,一种是一次申请单个gpio,通过设备树,成功后操纵该gpio,另一种是使用pinctrl子系统,通过设备树设置,一次操作多个gpio。
2.1 直接操作GPIO:
因为GPIO一般都是平台设备驱动,一般设备树挂载的节点都可以在&soc下:
device_node {
...
gpio_name = <&msm_gpio >; //gpio_99
...
}
驱动代码:
int gpio_99 = of_get_named_gpio_flags(dev->of_node, "gpio_name", , NULL); //从设备数节点, 可选
gpio_request(gpio_99, "gpio_name"); //通过gpio号申请gpio
gpio_direction_output(gpio_99, ); //设置gpio_99输出,初始值为1
gpio_set_value(gpio_99, ); //设置gpio_99值为0
gpio_free(gpio_99); //gpio_99不再使用后应当释放
gpio的申请和设置都可能会出现失败的情况,应该做好异常处理;;
2.2 pinctrl子系统设备树:
Pin Control Subsystem是Linux内核抽象出的一套用于控制硬件引脚的一套子系统。比上面的方式多了许多配置GPIO的方式,例如配置电流(可以用于睡眠唤醒的功能),管理pin脚的复用,接口规格等功能;蜗窝科技的大牛们就有几篇写的很好:
linux内核中的GPIO系统之(2):pin control subsystem
Linux内核中的GPIO系统之(3):pin controller driver代码分析
linux内核中的GPIO系统之(4):pinctrl驱动的理解和总结
linux内核中的GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合
DTS代码:
device_node {
...
pinctrl-names = "gpio_active", "gpio_sleep"; //分别对用pinctrl-0和pinctrl-1
pinctrl- = <&gpio_active>; //引用
pinctrl- = <&gpio_sleep>; //引用
...
};
驱动代码:
struct pinctrl *pinctrl = devm_pinctrl_get(device); //获取device对应节点下的pinctrl
struct pinctrl_state = pinctrl_lookup_state(pinctrl, "gpio_active"); //通过pinctrl名获取pinctrl对应状态
pinctrl_select_state(pinctrl, pinctrl_state); //设置pinctrl的状态为'gpio_active
devm_pinctrl_put(pinctrl); //使用完了释放资源
高通GPIO驱动(DTS方式)的更多相关文章
- 高通 display 驱动【转】
高通display驱动 0. 关键字 MDSS : 高通平台lcd multimedia Display sub system DSI: Display Serial Interface qcom,m ...
- 高通LCD驱动调试
本文转载自:http://www.itgo.me/a/x6305658852004979994/lcd%20qcom 来自 :http://blog.csdn.net/dacaozuo/article ...
- 高通Camera驱动分析【转】
本文转载自:http://blog.csdn.net/liwei16611/article/details/53955711 1.Sensor slave配置 结构体msm_camera_sensor ...
- 小米手机(HM1SW)高通开发android程序全过程
小米手机(HM1SW)开发android程序全过程 修改历史: 2016年5月9日 -------- 整理文档 a.增加了手机基本信息. b.增加360手机助手连接说明 2016年2月26日 - ...
- Linux加载DTS设备节点的过程(以高通8974平台为例)
DTS是Device Tree Source的缩写,用来描述设备的硬件细节.在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码, ...
- 高通ASOC中的machine驱动
ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machin ...
- 高通LCD的pwm背光驱动
发生异常的现象: msm8953 lcd在快速亮灭的情况下背光概率性休眠不灭:测量高通pwm,发现正常的时候pwm的管脚LCM_BL_PWM为低电平,失败的时候为高电平: 根据原理图: mpp是什么? ...
- 高通Audio中ASOC的machine驱动(一)
ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machin ...
- linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】
本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...
随机推荐
- LDA-线性判别分析(一)预备知识
本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...
- MathWorks官方消息:神经网络工具箱不能编译
各位会员大家好,大家关心的问题,我已经大部分得到答案. 10月25号-27号我访问了MathWorks公司在波士顿的总部,大家经常关心的问题,我大部分都得到了答案. 关于神经网络工具箱,我与Matla ...
- 《Kubernetes权威指南》——入门
1 Hello World 1.1 概述 搭建一个Web留言板应用,采用PHP+Redis. Redis由一个master提供写和两个slave提供读. PHP构成的前端Web层由三个实例构成集群,访 ...
- SQL优化经验总结
一. 优化SQL步骤 1. 通过 show status和应用特点了解各种 SQL的执行频率 通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extend ...
- 使用shell脚本来自动化处理我们的工作,解放双手
Shell脚本介绍 1.Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. 2.Shell可以直接使用在wi ...
- Java基础之Java 修饰符
前言:Java内功心法之Java 修饰符,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) Java语言提供了很多修饰符,主要分为以下两类: 访 ...
- [HEOI2016] 字符串
Description 给定长度为n的字符串,m次询问,每次询问s[a...b]的所有子串与s[c...d]的LCP的最大值.n,m<=10^5. Solution 感觉这种n,m<=10 ...
- MySQL中的事务及读写锁实现并发访问控制
一.并发控制中锁的概念 锁是并发控制中最核心的概念之一,在MySQL中的锁分两大类,一种是读锁,一种是写锁,读锁也可以称为共享锁(shared lock),写锁也通常称为排它锁(exclusive l ...
- 图片上传预览js
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- windows下mysql-5.7.18安装
在官网下载了mysql压缩包,按照官网:https://dev.mysql.com/doc/refman/5.7/en/windows-installation.html的教程安装,但是出错,后面根据 ...