高通平台 pmic—gpio修改(一)
最近遇到一个很有意思的问题,在abl阶段获取某个gpio状态并且进行判断,若为拉低则去做下一步的客制化的功能。过程较为坎坷,因此记录一下
首先,在abl阶段的时候就要进行检测,那么该gpio一定要在abl阶段之前保持拉高,若状态为默认拉低的话,那么在任何场景下都会走这个功能,不符合需求。使用示波器量取后发现该gpio的默认状态为拉高。那么我们需要做的事情就很清楚了。在进入abl之前保证我这个gpio默认为拉高即可。
分析:
1.询问硬件,这个gpio是普通gpio还是特殊gpio,如(pmic)。本次我们的gpio刚好就是pmic的gpio6
2.查看高通文档,使用的为pmic-xxx
3.在abl之前,那么软件侧就只有xbl可以进行gpio初始化操作
那么前期的工作准备的就差不多了,需求就为:在xbl阶段,将这个gpio设置成默认拉高状态
下面是代码部分:由于我本人之前也没有接触过pmic相关的,因此也只能走一步看一步
首先到pmic对应的头文件下查看有没有什么有用的信息
typedef enum
{PM_GPIO_1, /**< GPIO 1. */PM_GPIO_2, /**< GPIO 2. */PM_GPIO_3, /**< GPIO 3. */PM_GPIO_4, /**< GPIO 4. */PM_GPIO_5, /**< GPIO 5. */PM_GPIO_6, /**< GPIO 6. */...PM_GPIO_INVALID
}pm_gpio_perph_index;
可以看到这里的枚举定义中存在一个GPIO_6,那么PM_GPIO_6可能就是代表PMIC内的GPIO6。在代码内应该也是使用PM_GPIO_6来表示GPIO6,那么再查找一下哪里使用这个变量
QcomPkg/SocPkg/Fillmore/Library/ButtonsTargetLib/ButtonsBootLib.c
73: .Gpio = PM_GPIO_6,QcomPkg/SocPkg/Palima/Library/ButtonsTargetLib/ButtonsLibPrivate.h
69: .Gpio = EFI_PM_GPIO_6,QcomPkg/Include/api/pmic/pm/pm_gpio.h
131: PM_GPIO_6, /**< GPIO 6. */QcomPkg/Include/Protocol/EFIPmicGpio.h
91: EFI_PM_GPIO_6, /**< GPIO 6. */
可以看到有4个地方存在关于GPIO_6的定义或者使用,其中第三个是我们刚才已经看过的。由于不熟悉PMIC,我选择都看一下里面都描述了什么
第一个可以看到就是一个变量的初始化赋值。将对应的GPIO设置为PM_GPIO_6
const ButtonBootPmicGpioCfg VolUpButton = {.Gpio = PM_GPIO_6,.VoltageSource = PM_GPIO_VIN0,
};
第二个可以看到也是对VoluUpButton的初始化操作
ButtonPmicGpioCfg VolUpButton = {.PmicDeviceIndex = PMIC_B,.Gpio = EFI_PM_GPIO_6,.ISourcePulls = EFI_PM_GPIO_I_SRC_PULL_UP_30uA,.VoltageSource = EFI_PM_GPIO_VIN1,.OutBufferStrength = EFI_PM_GPIO_OUT_DRV_STR_LOW,.Source = EFI_PM_GPIO_SRC_GND,
};
第三个上面已经看过,不重复看
第四个同样的也是GPIO 6的枚举。那么现在就存疑,我们是需要使用EFI_PM_GPIO_6还是第PM_GPIO_6,但是有一个共同点。他们都是对VolupButton进行初始化,那么先接着往下看
typedef enum
{EFI_PM_GPIO_1, /**< GPIO 1. */EFI_PM_GPIO_2, /**< GPIO 2. */EFI_PM_GPIO_3, /**< GPIO 3. */EFI_PM_GPIO_4, /**< GPIO 4. */EFI_PM_GPIO_5, /**< GPIO 5. */EFI_PM_GPIO_6, /**< GPIO 6. */...EFI_PM_GPIO_INVALID
}EFI_PM_GPIO_PERIPH_INDEX;
存在几个地方对VolUpButton进行调用及头文件内的初始化,我们先看一下初始化的内容,
ButtonPmicGpioCfg VolUpButton = {.PmicDeviceIndex = PMIC_B,.Gpio = EFI_PM_GPIO_6,.ISourcePulls = EFI_PM_GPIO_I_SRC_PULL_UP_30uA,.VoltageSource = EFI_PM_GPIO_VIN1,.OutBufferStrength = EFI_PM_GPIO_OUT_DRV_STR_LOW,.Source = EFI_PM_GPIO_SRC_GND,
};
再看看调用的地方
EFI_STATUS ConfigureButtonGPIOs ( VOID )
{EFI_STATUS Status;// volume upStatus = EnableInput(&VolUpButton);if ( EFI_ERROR (Status) )...returu Status;
}
查看一下这个EnableInput函数做了什么,发现是对VolUpButton进行初始化,那么并且我没有在其他地方找到有调用这个PMIC_GPIO_6或者EFI_PMIC_GPIO_6的地方。对于上面我们提到的PMIC_GPIO_6以及EFI_PMIC_GPIO_6,在该平台内都有使用到。那么是不是可以假设为:xbl阶段会在两个地方进行这个Button的初始化呢?那么我们如果想要修改验证的话,也可以通过差分校验,都打开、都不打开、一个打开一个不打开这样去验证。
验证方法:
在对VolUpButton定义的地方修改.ISourcePulls属性,修改为EFI_PM_GPIO_I_SRC_PULL_DOWN_10uA,默认为拉低10uA状态。然后在abl内获取这个GPIO的状态看看是否正确,是的话则pass
总结:上面这个地方是依附于其他功能进行修改的,如果其他的PMIC没有对这个东西进行初始化,又或者这个地方是不可被修改的否则会与其他功能进行冲突的话,那么我们的方案就会被pass了。后续我会讲一下另一种修改的方式。
高通平台 pmic—gpio修改(一)相关推荐
- 高通平台 pmic—gpio修改(2)
根据上一篇文章中的结论:如果在xbl阶段希望修改pmic相关的gpio,可以查看这个gpio是否已经有功能对其进行初始化.那么需要考虑一种情况:如果这个gpio从未被用过呢?因此本篇就是从根本上解决这 ...
- 高通平台lk阶段logo修改
高通平台lk阶段logo修改: 1.通过logo图片得到要显示的数组: 运行"ffmpeg -i logo.png -f rawvideo -pix_fmt bgr24 logo.raw&q ...
- 高通平台sensor学习
刚入行驱动时最先接触调试的外设模块便是sensor,一直都是零零散散的记录,这次终于下定决心对自己所学做一个系统的总结. sensor作为一款常用的外设,虽不起眼但是很多功能确实离不开它.比如我们手机 ...
- 高通平台android开发总结 MSM平台上的AMSS
http://blog.csdn.net/mirkerson/article/details/7691029 MSM平台上的AMSS REX启动分析--基于Qualcomm平台 1.高通平台andro ...
- 高通平台 lcd driver 调试小结
一.概述 1.1 简介 本文档主要包括LCD模块的驱动流程分析.Framebuffer相关知识.Gralloc等相关内容,以及LCD调试的一些经验和相关bug的分析和讲解. 1.2 开发环境 And ...
- 高通平台android开发总结
http://www.cnblogs.com/yuzaipiaofei/archive/2012/07/24/4124179.html 1.高通平台android开发总结 1.1 搭建高通平台环境开发 ...
- 高通平台android 环境配置编译及开发经验总结
完全转自:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...
- 高通平台android开发总结 .
http://blog.csdn.net/mirkerson/article/details/7691029 http://blog.csdn.net/mirkerson/article/detail ...
- 高通平台android 环境配置编译及开发经验总结【转】
1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...
- 高通android开源代码下载,高通平台Android源码bootloader分析之sbl1(三)
前两篇博文分析了启动流程.代码流程.cdt,接下来就分析另外几个需要格外关注的部分. ##log系统 sbl1中的log系统也是sbl1部分调试会经常接触得部分高通平台在sbl中做的log系统并不是很 ...
最新文章
- 《马哥教育协办GIAC、GOPS顶级技术峰会完美落幕》
- Hdu-6249 2017CCPC-Final G.Alice’s Stamps 动态规划
- torch.mean
- lintcode-93-平衡二叉树
- 四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现
- 1.13 编程基础之综合应用 12 分数求和 4分 python
- Android 系统(153)---全面屏项目很多APP占不满全屏
- ad9生成坐标文件_提高效率 | 教你批量提取CAD坐标的小技巧
- app 侧边栏 html,响应式手机App样式隐藏侧边栏特效插件
- linux 格式化 lvm2,fedora 23 lvm2格式 根目录磁盘空间不足 扩容方法
- Qt之小学徒学习记录分享
- MySQL 清除表空间碎片
- Java获取Excel中链接的文件
- 【转】25个开发性能优化
- Goland 常用插件
- Flask开发成语接龙游戏,以后闲了手机玩玩自己写的游戏吧!
- Oracle 11g 详细安装教程 Windows版
- 流程管理模板规范及相关表单
- 18位sfz最后一位号码验证
- jQuery循环中获取指定下标的操作
热门文章
- 2014中国互联网安全大会
- oracle11g64位怎么用sql,PLSQLDeveloper连接Oracle11g64位数据库配置详解(图文)
- Git详解之一 Git起步
- Postgres psql: 致命错误: 角色 postgres 不存在
- XMOS 最新 USB 专业录音声卡解决方案
- RPL(5):RFC6550翻译(5)---ICMPv6 RPL控制报文
- 该去大公司做螺丝钉,还是去小公司发光发热?
- Tomcat服务器 和 HTTP协议
- 用python识别图片上的数字_python 识别图片上的数字
- 别在直接背3500个英语单词了,支你一招,看过来