最近遇到一个很有意思的问题,在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修改(一)相关推荐

  1. 高通平台 pmic—gpio修改(2)

    根据上一篇文章中的结论:如果在xbl阶段希望修改pmic相关的gpio,可以查看这个gpio是否已经有功能对其进行初始化.那么需要考虑一种情况:如果这个gpio从未被用过呢?因此本篇就是从根本上解决这 ...

  2. 高通平台lk阶段logo修改

    高通平台lk阶段logo修改: 1.通过logo图片得到要显示的数组: 运行"ffmpeg -i logo.png -f rawvideo -pix_fmt bgr24 logo.raw&q ...

  3. 高通平台sensor学习

    刚入行驱动时最先接触调试的外设模块便是sensor,一直都是零零散散的记录,这次终于下定决心对自己所学做一个系统的总结. sensor作为一款常用的外设,虽不起眼但是很多功能确实离不开它.比如我们手机 ...

  4. 高通平台android开发总结 MSM平台上的AMSS

    http://blog.csdn.net/mirkerson/article/details/7691029 MSM平台上的AMSS REX启动分析--基于Qualcomm平台 1.高通平台andro ...

  5. 高通平台 lcd driver 调试小结

    一.概述 1.1 简介 本文档主要包括LCD模块的驱动流程分析.Framebuffer相关知识.Gralloc等相关内容,以及LCD调试的一些经验和相关bug的分析和讲解. 1.2  开发环境 And ...

  6. 高通平台android开发总结

    http://www.cnblogs.com/yuzaipiaofei/archive/2012/07/24/4124179.html 1.高通平台android开发总结 1.1 搭建高通平台环境开发 ...

  7. 高通平台android 环境配置编译及开发经验总结

    完全转自:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  8. 高通平台android开发总结 .

    http://blog.csdn.net/mirkerson/article/details/7691029 http://blog.csdn.net/mirkerson/article/detail ...

  9. 高通平台android 环境配置编译及开发经验总结【转】

    1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...

  10. 高通android开源代码下载,高通平台Android源码bootloader分析之sbl1(三)

    前两篇博文分析了启动流程.代码流程.cdt,接下来就分析另外几个需要格外关注的部分. ##log系统 sbl1中的log系统也是sbl1部分调试会经常接触得部分高通平台在sbl中做的log系统并不是很 ...

最新文章

  1. redis mysql查询数据类型_linux 常见的标识与Redis数据库详解
  2. asp.net 上传大文件解决方案(转)
  3. 如何针对产品销售设计一套有效的奖励和惩罚销售措施?
  4. 安卓scrollview无法滑动_安卓上线前,小光有话想对你们说
  5. CodeForces - 287C Lucky Permutation(构造)
  6. 给asp.net mvc小白扫盲用的
  7. Canvas Clock
  8. Android平台RTSP轻量级服务|RTMP推送摄像头或屏幕之音频接口设计
  9. GitLab 严重漏洞可导致攻击者窃取runner 注册令牌
  10. MyISAM存储引擎简介
  11. 各种泵的图形符号_水泵cad画法
  12. 基于ResNet的MSTAR数据集目标分类
  13. termux python turtle_如何在termux上安装Python的turtle库?
  14. 传时珍医药伟业谱本草科学新篇——访李时珍医药集团董事长林朝辉
  15. IOS5短信拦截怎么实现?
  16. 员工转正申请书_员工转正申请书简短的
  17. html+css模仿的锤子官方首页
  18. python中字符串和文本处理(很详细)
  19. 用友U8如何调整凭证打印模板
  20. excel 置信区间 计算_如何用excel计算95%的置信区间

热门文章

  1. MT9255无法使用mm指令编译某个模块的问题
  2. 线性代数史蒂文_史蒂文·弗兰克的博客国歌
  3. 清远市高中计算机考试时间,2017年清远市中考体育考试安排
  4. stm32f103c8t6视频教程
  5. python股票网格交易法详解_详解网格交易法
  6. android标题栏尺寸,Android平台设计规范19条(轻松入门)
  7. linux戒游戏下载,灵魂宝戒游戏下载-灵魂宝戒安卓版v0.9.50-Linux公社
  8. 【保姆级教程】三角网生成库---triangle快速入门及使用说明(再不会就说不过去了啊兄弟)
  9. 医院信息系统源码 HIS源码
  10. C++Pollard_rho分解质因数及其例题—————Prime Test