安卓11 uefi启动 lcd通过gpio读取lcm_id 进行兼容
本地代码兼容文件路径如下
AMSS / BOOT.XF.4.1/boot_images/QcomPkg/SocPkg/KamortaPkg/Library/MDPPlatformLib/MDPPlatformLib.c
正常屏幕点亮不说了,主要写一下如何进行兼容,主要通过读取id脚高低来区分
定义如下读取id脚高低的函数,具体自行查看吧,不解释了
int panel_detect_lcd_id(void){
UINT32 lcd_id = 1;
EFI_STATUS status = EFI_SUCCESS;
UINT32 idconfig;
EFI_TLMM_PROTOCOL *TLMMProtocol = NULL;
if (EFI_SUCCESS != gBS->LocateProtocol(&gEfiTLMMProtocolGuid, NULL, (void**)&TLMMProtocol))
{
DEBUG((EFI_D_ERROR, "DisplayDxe: Locate TLMM protocol failed!\n"));
}
else
{
idconfig = EFI_GPIO_CFG( LCD_ID_GPIO, 0, GPIO_INPUT, GPIO_PULL_UP, GPIO_2MA );
status = TLMMProtocol->ConfigGpio((UINT32)idconfig,TLMM_GPIO_ENABLE);
if (status != EFI_SUCCESS)
{
DEBUG((EFI_D_ERROR, "Faile to Configure MSM GPIO 34 ENABLE !!\n"));
}
status = TLMMProtocol->GpioIn(idconfig, &lcd_id);
}
return lcd_id;
}
设定的返回值就是高或低,找到原先屏幕的入口如下,具体位置自己找吧,可通过修改值确定
pPanelList = &uefiPanelList[1]; //原来的屏
if (panel_detect_lcd_id()){ //判断gpio读取的高低
pPanelList = &uefiPanelList[0]; //新屏
}else{
pPanelList = &uefiPanelList[1]; //原来的
}
大致就是这样! 谢谢