android屏幕下电控制

很久之前android刚兴起时候从事battery ,charge驱动顺带着把PMS差不多也看了一遍,最开始看的很多不理解。后来在各家公司经历不同的角色,对PMS这块了解越来越多,也越来越深。特别是前前面搞fingerprint快速亮屏时,修改指纹服务以为PMS逻辑控制,以达到更快的亮屏速。进一步加深了对PMS的理解,目前的我正从事高通平台LCD驱动开发工作,由于遇到一个LCD下电时序的问题,与surfaceflinger和PMS再次打交道,这里就记录下个人对PMS如何对LCD进行正电控制的,这里大体可以分四层
1.framework层逻辑控制,最终调用native方法与surfaceflinger进行通信
2.jni获取surfaceflinger服务与surfaceflinger进行通信,而surfaceflinger又通过HWC与hardware层的compose服务进行通信
3.composer服务层通过节点访问驱动,写入blank,unblank命令
4.驱动层LCD收到上下电命令,进行背光IC,偏压IC,mipi(HS,LP),lcd的上下电的时序控制
由于驱动各家实现方案都不太一样,差异比较大。这里只对前三层进行简单的分析。

1.framework层LCD下电的逻辑控制

在这里插入图片描述
上图就是大体的逻辑调用控制,当我们按下power键进行休眠时就会调用goToSleep函数。而updatePowerStateLocked是实现屏上下电控制的核心函数,这个函数很多地方调用。gotosleep只是其中一个,毕竟休眠是最常见的操作
发
具体的流程及函数实现这里就不具体说了,可以自行对照代码来看。需要特别注意的是setScreenState这个接口调用
在这里插入图片描述
这个函数不是直接调用requestDisplayState进行下步操作,而是设置当前屏幕状态以及更新lock,通过notifyAll告诉当前阻塞的线程继续运行
在这里插入图片描述
这里比较复杂,其它的都还好。

2.JNI层

在这里插入图片描述
这个JNI调用比较简单,核心就是binder调用.serviceManager获取surfaceflinger服务,获取实例对象
在这里插入图片描述
3.surfaceflinger及HWC以及composer
这层比较复杂,涉及的知道点有surfaceflinger,hwc(hwc1,hwc2), hardware层的服务进程composer,大体顺序如下:

surfaceflinger  - 〉 hwc - 〉 composer
特别说明的这里的源码是以hwc2以及高通平台的composer来研究的
在这里插入图片描述
hardware层的代码路径如上,这份代码比较老了是android8.0的,基于高通sdm框架的。现在高通显示框架基本是DRM了对应的composer可能变化很大,这块代码没有就不知道细节如何了
此层的框图如下:
在这里插入图片描述
这里就不具体对照源码来讲解了,有兴趣可以自行对照框图去看源码,这里需要特别指出的是:HAL层在这里也就sdm最终是通过驱动提供的节点来与LCD进行通信的,关键代码如下:
在这里插入图片描述
一般情况下,都只有一块屏。操作的是fb0节点。如果有几块屏,那么对应的就要其它fb节点了。对于fb0来说这种方式很容易理解,高通最新显示框架DRM,就没有fb0了对于理解和使用都会有一定的麻烦。
就到这里了,以上是个人理解如有错误欢迎讨论

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bruk_spp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值