最近遇到一个很有意思的问题,在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. 《马哥教育协办GIAC、GOPS顶级技术峰会完美落幕》
  2. Hdu-6249 2017CCPC-Final G.Alice’s Stamps 动态规划
  3. torch.mean
  4. lintcode-93-平衡二叉树
  5. 四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现
  6. 1.13 编程基础之综合应用 12 分数求和 4分 python
  7. Android 系统(153)---全面屏项目很多APP占不满全屏
  8. ad9生成坐标文件_提高效率 | 教你批量提取CAD坐标的小技巧
  9. app 侧边栏 html,响应式手机App样式隐藏侧边栏特效插件
  10. linux 格式化 lvm2,fedora 23 lvm2格式 根目录磁盘空间不足 扩容方法
  11. Qt之小学徒学习记录分享
  12. MySQL 清除表空间碎片
  13. Java获取Excel中链接的文件
  14. 【转】25个开发性能优化
  15. Goland 常用插件
  16. Flask开发成语接龙游戏,以后闲了手机玩玩自己写的游戏吧!
  17. Oracle 11g 详细安装教程 Windows版
  18. 流程管理模板规范及相关表单
  19. 18位sfz最后一位号码验证
  20. jQuery循环中获取指定下标的操作

热门文章

  1. 2014中国互联网安全大会
  2. oracle11g64位怎么用sql,PLSQLDeveloper连接Oracle11g64位数据库配置详解(图文)
  3. Git详解之一 Git起步
  4. Postgres psql: 致命错误: 角色 postgres 不存在
  5. XMOS 最新 USB 专业录音声卡解决方案
  6. RPL(5):RFC6550翻译(5)---ICMPv6 RPL控制报文
  7. 该去大公司做螺丝钉,还是去小公司发光发热?
  8. Tomcat服务器 和 HTTP协议
  9. 用python识别图片上的数字_python 识别图片上的数字
  10. 别在直接背3500个英语单词了,支你一招,看过来