高通平台 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系统并不是很 ...
最新文章
- redis mysql查询数据类型_linux 常见的标识与Redis数据库详解
- asp.net 上传大文件解决方案(转)
- 如何针对产品销售设计一套有效的奖励和惩罚销售措施?
- 安卓scrollview无法滑动_安卓上线前,小光有话想对你们说
- CodeForces - 287C Lucky Permutation(构造)
- 给asp.net mvc小白扫盲用的
- Canvas Clock
- Android平台RTSP轻量级服务|RTMP推送摄像头或屏幕之音频接口设计
- GitLab 严重漏洞可导致攻击者窃取runner 注册令牌
- MyISAM存储引擎简介
- 各种泵的图形符号_水泵cad画法
- 基于ResNet的MSTAR数据集目标分类
- termux python turtle_如何在termux上安装Python的turtle库?
- 传时珍医药伟业谱本草科学新篇——访李时珍医药集团董事长林朝辉
- IOS5短信拦截怎么实现?
- 员工转正申请书_员工转正申请书简短的
- html+css模仿的锤子官方首页
- python中字符串和文本处理(很详细)
- 用友U8如何调整凭证打印模板
- excel 置信区间 计算_如何用excel计算95%的置信区间
热门文章
- MT9255无法使用mm指令编译某个模块的问题
- 线性代数史蒂文_史蒂文·弗兰克的博客国歌
- 清远市高中计算机考试时间,2017年清远市中考体育考试安排
- stm32f103c8t6视频教程
- python股票网格交易法详解_详解网格交易法
- android标题栏尺寸,Android平台设计规范19条(轻松入门)
- linux戒游戏下载,灵魂宝戒游戏下载-灵魂宝戒安卓版v0.9.50-Linux公社
- 【保姆级教程】三角网生成库---triangle快速入门及使用说明(再不会就说不过去了啊兄弟)
- 医院信息系统源码 HIS源码
- C++Pollard_rho分解质因数及其例题—————Prime Test