前言
最近在调T527 Android13系统,系统配置EDP屏+HDMI显示,当机器只接EDP屏不接hdmi开机的时候,机器进不去系统桌面,一直卡在开机动画的界面,如果同时接EDP屏和HDMI开机,机器是可以进入到系统桌面的。
问题分析
edp屏可以点亮,那么说明不是底层驱动和底层配置的问题,那要从android层去入手分析原因,于是查看原厂文档《Linux_EDP_开发指南.pdf》,其中有提到系统配置edp的时候需要配置json文件,将 json 文件的 Display0 节点下的 Inter‑faceType 配置为 “EDP”。json 文件目录为:android/device/softwinner/XXX/YYY/display/dispconfigs/YYY.json(XXX 为芯片平台,YYY 为板型,YYY名称对应ro.product.vendor.device属性)。于是我找到了自己项目的json文件,内容如下:
{
"DisplayEngineVersion": 2,
"DisplayNumber": 3, /*Display0, Display1, Display2 */
"PrimaryDisplay": ["Display0"],
"ExternalDisplay": ["Display1", "Display2"],
"Display0": {
/* Available interface type: LCD/HDMI/CVBS */
"InterfaceType": "LCD",
"DisplayEnginePortId": 0,
"OverrideFramebufferSize": 1,
"FramebufferWidth": 1920,
"FramebufferHeight": 1080,
"DpiX": 160,
"DpiY": 160,
"HotplugSupported": 0,
"AfbcSupported": 0,
"HardwareRotateSupported": 0,
"BandwidthLimited": 338800,
"DefaultOutputMode": 0
},
"Display1": {
/* Available interface type: LCD/HDMI/CVBS */
"InterfaceType": "HDMI",
"DisplayEnginePortId": 1,
"OverrideFramebufferSize": 1,
"FramebufferWidth": 1920,
"FramebufferHeight": 1080,
"DpiX": 160,
"DpiY": 160,
"HotplugSupported": 0,
"AfbcSupported": 0,
"HardwareRotateSupported": 0,
"BandwidthLimited": 338800,
"DefaultOutputMode": 0
},
"Display2": {
/* Available interface type: LCD/HDMI/CVBS */
"InterfaceType": "DP",
"DisplayEnginePortId": 1,
"OverrideFramebufferSize": 1,
"FramebufferWidth": 1280,
"FramebufferHeight": 720,
"DpiX": 160,
"DpiY": 160,
"HotplugSupported": 0,
"AfbcSupported": 0,
"HardwareRotateSupported": 0,
"BandwidthLimited": 338800,
"DefaultOutputMode": 0
}
}
试着将上面的Display0节点中的InterfaceType改为“EDP”,测试发现系统还是会卡在开机logo界面。
后面抓取log,没有发现有什么明显的显示报错的log,但是发现如下显示的相关log:
W displayd: xxxxxxx: threadedStartup begin
W displayd: xxxxxxx: HAL device config from DTS
W displayd: Displays (3 entries)
W displayd: + Display0{logicid=0, framebuffer=1920x1080(override=1), dpi=160x160}
W displayd: DisplayEnginePortId=0
W displayd: InterfaceType=EDP
W displayd: DefaultOutputMode=0
W displayd: HotplugSupported=0
W displayd: AfbcSupported=0
W displayd: HardwareRotateSupported=0
W displayd: BandwidthLimited=0 Bytes per frame
W displayd: + Display1{logicid=1, framebuffer=1920x1080(override=1), dpi=160x160}
W displayd: DisplayEnginePortId=1
W displayd: InterfaceType=HDMI
W displayd: DefaultOutputMode=0
W displayd: HotplugSupported=0
W displayd: AfbcSupported=0
W displayd: HardwareRotateSupported=0
W displayd: BandwidthLimited=0 Bytes per frame
W displayd: + Display2{logicid=1, framebuffer=1920x1080(override=1), dpi=160x160}
W displayd: DisplayEnginePortId=1
W displayd: InterfaceType=DP
W displayd: DefaultOutputMode=0
W displayd: HotplugSupported=0
W displayd: AfbcSupported=0
W displayd: HardwareRotateSupported=0
W displayd: BandwidthLimited=0 Bytes per frame
里面读取到了EDP、HDMI、DP三个设备的显示配置。想到EDP和DP是二选一的,配置了EDP那么就不能配置DP显示,这两个配置应该是不可以同时存在的,但是原厂的文档里面也没有提示这一点,于是试着把DP的显示配置去掉,把DisplayNumber配置改为2。重新编译升级测试。这次机器终于没卡在开机动画界面。