UEFI XBL 点亮LCD 流程
1.复制修改QcomPkg/Settings/Panel/Panel_kd080d56_720p_video.xml文件。
KD080D56 kd080d56 720p video mode dsi panel 800 30 24 24 0 0 0 1280 20 12 4 0 0 0 8 3 1 0 36 1 4 True True 0x3C0000 0x3B0000 0x3B4000 0x3B8000 0x3BC000 0x3C0000 False False 00 05 11 00ff 7805 29 00ff 32 05 28FF 3205 10FF 78 1 2 0 10 10000 10000 0 修改:HorizontalActive
HorizontalFrontPorch
HorizontalBackPorch
HorizontalSyncPulse
HorizontalSyncSkew
HorizontalLeftBorder
HorizontalRightBorder
VerticalActive
VerticalFrontPorch
VerticalBackPorch
VerticalSyncPulse
VerticalSyncSkew
VerticalTopBorder
VerticalBottomBorderDSIInitSequence
DSITermSequence
2.修改QcomPkg/Include/Library/MDPPlatformLib.h
添加相应LCD
@@ -116,20 +116,21 @@ typedef enum {MDPPLATFORM_PANEL_NT36525_TRULY_HDPLUS_VIDEO, /* nt36525 truly hdplus video mode */MDPPLATFORM_PANEL_R66451_AMOLED_HDPLUS_CMD, /* r66451 hd plus 90hz cmd mode */MDPPLATFORM_PANEL_R66451_AMOLED_HDPLUS_VIDEO, /* r66451 hd plus 90hz video mode */MDPPLATFORM_PANEL_NT36672E_90HZ_FHD_PLUS_VIDEO, /* nt36672e 90hz fhd plus video mode */MDPPLATFORM_PANEL_NT36672E_120HZ_FHD_PLUS_VIDEO, /* nt36672e 120hz fhd plus video mode */MDPPLATFORM_PANEL_EXT_BRIDGE_1080P_VIDEO, /* External bridge 1080p vid */MDPPLATFORM_PANEL_ILI9881C_720P_VIDEO, /* ILI9881C lcd video mode panel */MDPPLATFORM_PANEL_HX8394F_720P_VIDEO,MDPPLATFORM_PANEL_ILI9881D_720P_VIDEO,MDPPLATFORM_PANEL_KD070D57_C006_720P_VIDEO, + MDPPLATFORM_PANEL_KD080D56_720P_VIDEO,MDPPLATFORM_PANEL_MAX} MDPPlatformPanelType;
3.修改comPkg/SocPkg/KamortaPkg/LAA/Core.fdf
@@ -451,20 +451,25 @@ FvNameGuid = 631008B0-B2D1-410A-8B49-2C5C4D8ECC7EFILE FREEFORM = 8297c793-9861-422c-9f67-d447af1ea815 {SECTION UI = "Panel_ili9881d_720p_video.xml"SECTION RAW = QcomPkg/Settings/Panel/Panel_ili9881d_720p_video.xml}FILE FREEFORM = 8297c793-9861-422c-9f67-d447af1ea816 {SECTION UI = "Panel_kd070d57_c006_720p_video.xml"SECTION RAW = QcomPkg/Settings/Panel/Panel_kd070d57_c006_720p_video.xml} + + FILE FREEFORM = 0cbd71a5-5ec0-4145-a014-5975bb51fc31 { + SECTION UI = "Panel_kd080d56_720p_video.xml" + SECTION RAW = QcomPkg/Settings/Panel/Panel_kd080d56_720p_video.xml + }# End - Display panel configuration xmlFILE FREEFORM = 3E5584ED-05D4-4267-9048-0D47F76F4248 {SECTION UI = "battery_symbol_Soc10.bmp"SECTION RAW = QcomPkg/Application/QcomChargerApp/battery_symbol_Soc10.bmp}FILE FREEFORM = 4753E815-DDD8-402d-BF69-9B8C4EB7573E {SECTION UI = "battery_symbol_NoBattery.bmp"
4.修改 QcomPkg/SocPkg/KamortaPkg/Library/MDPPlatformLib/MDPPlatformLib.c
@@ -128,20 +128,34 @@ const static int8 dummy_xmldata[] =Dynamic panel detect list:-- first entry contains default panelAt SDM845 panel detection base on platform subtype-- use Truly 2k panel--- dual dsi (without dsc) video and cmd mode--- single dsi with DSC video and cmd mode***************************************************************************/static PlatformDSIDetectParams uefiPanelList[] = { + { + 0x06, // uCmdType + 0x05, // total number of retry on failures + { + {{0xDA, 0x00}, // address to read ID1 + {0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // expected readback + }, + }, + 0, // Lane remap order {0, 1, 2, 3} + NULL, // psPanelCfg (panel configuration) + 0, // uPanelCfgSize + MDPPLATFORM_PANEL_KD080D56_720P_VIDEO, // eSelectedPanel + 0 // uFlags + },{0x06, // uCmdType0x05, // total number of retry on failures{{{0xDA, 0x00}, // address to read ID1{0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // expected readback},},0, // Lane remap order {0, 1, 2, 3}NULL, // psPanelCfg (panel configuration) @@ -181,20 +195,21 @@ static PlatformDSIDetectParams uefiPanelList[] = {/** List of supported panels. The ones with XML data have UEFI support and the rest are only supported by kernel. These are applicable for fastboot overrides of the* panel configuration.* */const PanelDTInfoType fastBootPanelList[] ={/*Supported Panels*/ + PANEL_CREATE_ENTRY("kd080d56_720p_video", MDPPLATFORM_PANEL_KD080D56_720P_VIDEO, "qcom,mdss_dsi_kd080d56_720p_video:", DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE, DISP_TIMING_CONFIG_NONE, PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI),PANEL_CREATE_ENTRY("kd070d57_c006_720p_video", MDPPLATFORM_PANEL_KD070D57_C006_720P_VIDEO, "qcom,mdss_dsi_kd070d57_c006_720p_video:", DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE, DISP_TIMING_CONFIG_NONE, PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI),PANEL_CREATE_ENTRY("hx8394f_720p_video", MDPPLATFORM_PANEL_HX8394F_720P_VIDEO, "qcom,mdss_dsi_hx8394f_720p_video:", DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE, DISP_TIMING_CONFIG_NONE, PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI),PANEL_CREATE_ENTRY("ili9881d_720p_video", MDPPLATFORM_PANEL_ILI9881D_720P_VIDEO, "qcom,mdss_dsi_ili9881d_720p_video:", DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE, DISP_TIMING_CONFIG_NONE, PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI),PANEL_CREATE_ENTRY("truly_td4330_fhd_cmd", MDPPLATFORM_PANEL_TD4330_V2_TRULY_FHD_CMD, "qcom,mdss_dsi_td4330_truly_v2_cmd:", DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE, DISP_TIMING_CONFIG_NONE,PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI),PANEL_CREATE_ENTRY("truly_td4330_fhd_vid", MDPPLATFORM_PANEL_TD4330_V2_TRULY_FHD_VIDEO, "qcom,mdss_dsi_td4330_truly_v2_video:", DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE, DISP_TIMING_CONFIG_NONE,PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI),PANEL_CREATE_ENTRY("truly_nt36525_hdplus_vid", MDPPLATFORM_PANEL_NT36525_TRULY_HDPLUS_VIDEO, "qcom,mdss_dsi_nt36525_truly_video:", DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE, DISP_TIMING_CONFIG_NONE,PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI, DISP_MODE_SINGLE_DSI),PANEL_CREATE_ENTRY("r66451_amoled_hd_plus_cmd", MDPPLATFORM_PANEL_R66451_AMOLED_HDPLUS_CMD, "qcom,mdss_dsi_r66451_hd_plus_90hz_cmd:", DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE, DISP_TIMING_CONFIG_NONE, PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER, DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER, DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER),PANEL_CREATE_ENTRY("r66451_amoled_hd_plus_vid", MDPPLATFORM_PANEL_R66451_AMOLED_HDPLUS_VIDEO, "qcom,mdss_dsi_r66451_hd_plus_90hz_video:", DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE, DISP_TIMING_CONFIG_NONE, PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER, DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER, DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER),
5.修改QcomPkg/SocPkg/KamortaPkg/Library/MDPPlatformLib/MDPPlatformLibPanelCommon.c
查看硬件线路图
拉对应的LCD_VDD_EN
LCD_PWR_EN
LCD_BL_EN
LCD_RST pins
更改pwm输出
@@ -110,21 +110,41 @@ MDP_Status Panel_Default_PowerUp(MDP_Display_IDType eDisplayId, Panel_PowerCtrlPif (EFI_SUCCESS != TLMMProtocol->ConfigGpio((UINT32)EFI_GPIO_CFG(LCD_2V8_EN_GPIO, 0, GPIO_OUTPUT, GPIO_PULL_UP, GPIO_8MA), TLMM_GPIO_ENABLE)){DEBUG((EFI_D_WARN, "DisplayDxe: Configure LCD_2V8_EN_GPIO failed!\n"));} if (EFI_SUCCESS != TLMMProtocol->GpioOut((UINT32)EFI_GPIO_CFG(LCD_2V8_EN_GPIO, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_16MA), GPIO_HIGH_VALUE)){DEBUG((EFI_D_WARN, "DisplayDxe: LCD_2V8_EN_GPIO gpio out failed!\n"));}} + /* Enable LCD_VDD_EN*/ + if (EFI_SUCCESS != TLMMProtocol->ConfigGpio((UINT32)EFI_GPIO_CFG(LCD_VDD_EN_GPIO, 0, GPIO_OUTPUT, GPIO_PULL_UP, GPIO_8MA), TLMM_GPIO_ENABLE)) + { + DEBUG((EFI_D_WARN, "DisplayDxe: Configure LCD_VDD_EN_GPIO failed!\n")); + } + if (EFI_SUCCESS != TLMMProtocol->GpioOut((UINT32)EFI_GPIO_CFG(LCD_VDD_EN_GPIO, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_16MA), GPIO_HIGH_VALUE)) + { + DEBUG((EFI_D_WARN, "DisplayDxe: LCD_VDD_EN_GPIO gpio out failed!\n")); + } + + MDP_OSAL_DELAYMS(20);+ /* Enable LCD_PWR_EN_GPIO*/ + if (EFI_SUCCESS != TLMMProtocol->ConfigGpio((UINT32)EFI_GPIO_CFG(LCD_PWR_EN_GPIO, 0, GPIO_OUTPUT, GPIO_PULL_UP, GPIO_8MA), TLMM_GPIO_ENABLE)) + { + DEBUG((EFI_D_WARN, "DisplayDxe: Configure LCD_PWR_EN_GPIO failed!\n")); + } + if (EFI_SUCCESS != TLMMProtocol->GpioOut((UINT32)EFI_GPIO_CFG(LCD_PWR_EN_GPIO, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_16MA), GPIO_HIGH_VALUE)) + { + DEBUG((EFI_D_WARN, "DisplayDxe: LCD_PWR_EN_GPIO gpio out failed!\n")); + }return Status;}/************************************************************************************************ FUNCTION: Panel_Default_PowerDown()** DESCRIPTION:* Panel power down sequence for default platform, such as CDP/MTP/QRD. @@ -326,21 +346,27 @@ static MDP_Status GetPmicIBBLABMode(MDP_Display_IDType eDisplayId, Panel_PowerCt** DESCRIPTION:* Configure PWM registers and enable it.************************************************************************************************/MDP_Status Panel_Default_Brightness_Enable(MDP_Display_IDType eDisplayId, Panel_PowerCtrlParams *pPowerParams){MDP_Status Status = MDP_STATUS_OK;EFI_QCOM_PMIC_GPIO_PROTOCOL *PmicGpioProtocol = NULL;EFI_QCOM_PMIC_PWM_PROTOCOL *PMICPWMProtocol = NULL; + EFI_TLMM_PROTOCOL *TLMMProtocol = NULL;EFI_STATUS eLocalStatus = EFI_SUCCESS; + if (EFI_SUCCESS != gBS->LocateProtocol(&gEfiTLMMProtocolGuid, NULL, (void **)&TLMMProtocol)) + { + DEBUG((EFI_D_ERROR, "DisplayDxe: Locate TLMM protocol failed!\n")); + Status = MDP_STATUS_NO_RESOURCES; + }if (MDP_STATUS_OK != (Status = GetPmicIBBLABMode(eDisplayId, pPowerParams))){DEBUG((EFI_D_ERROR, "DisplayDxe: Getting PMIC mode failed with error(%d), skipping peripheral power configuration!\n", Status));}else if (pPowerParams->ePMICSecondaryPower[eDisplayId] != MDP_PMIC_MODULE_CONTROLTYPE_NONE){// Configure Backlight enable gpio on Nebulaif (EFI_SUCCESS != gBS->LocateProtocol(&gQcomPmicGpioProtocolGuid, NULL, (VOID **)&PmicGpioProtocol)) @@ -378,33 +404,44 @@ MDP_Status Panel_Default_Brightness_Enable(MDP_Display_IDType eDisplayId, Panel_}/* Configure PWM */if (EFI_SUCCESS != gBS->LocateProtocol(&gQcomPmicPwmProtocolGuid, NULL, (void **)&PMICPWMProtocol)){DEBUG((EFI_D_ERROR, "DisplayDxe: Locate PMICPWM Protocol failed!\n"));Status = MDP_STATUS_NO_RESOURCES;} else{ - eLocalStatus = PMICPWMProtocol->PwmConfig(1, - EFI_PM_PWM_RSRC_PWM_4, + eLocalStatus = PMICPWMProtocol->PwmConfig(0, + EFI_PM_PWM_RSRC_PWM_1,511,1,2,EFI_PM_PWM_CLK_19_2_MHZ,EFI_PM_PWM_SIZE_9BIT);if (EFI_SUCCESS != eLocalStatus){DEBUG((EFI_D_ERROR, "DisplayDxe: PwmConfig failed error %d !\n", eLocalStatus));Status = MDP_STATUS_FAILED;}} + /*Enable Backlight gpio*/ + if (EFI_SUCCESS != TLMMProtocol->ConfigGpio((UINT32)EFI_GPIO_CFG(LCD_BL_EN_GPIO, 0, GPIO_OUTPUT, GPIO_PULL_UP, GPIO_8MA), TLMM_GPIO_ENABLE)) + { + DEBUG((EFI_D_WARN, "DisplayDxe: Configure LCD_BL_EN_GPIO failed!\n")); + } + + if (EFI_SUCCESS != TLMMProtocol->GpioOut((UINT32)EFI_GPIO_CFG(LCD_BL_EN_GPIO, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_16MA), GPIO_HIGH_VALUE)) + { + DEBUG((EFI_D_WARN, "DisplayDxe: LCD_BL_EN_GPIO gpio out failed!\n")); + } +return Status;}/************************************************************************************************ FUNCTION: Panel_Default_Peripheral_Power()** DESCRIPTION:* Secondary power sequence for other PMIC modules such as IBB/LAB.
6.QcomPkg/SocPkg/KamortaPkg/Library/MDPPlatformLib/MDPPlatformLibPanelCommon.h
根据GPIO table修改对应GPIO
@@ -37,21 +37,28 @@#define PM632_INDEX 1#define PMIC_IBBLAB_READYTIME 25 // Maximum of milliseconds to wait for IBB/LAB to stabilize (Can be up to 8.8ms +/-16%)/* SDM845 Main Panel default platform specific defines*/#define DEFAULT_DISP_RESET_GPIO 82 //GPIO number for LCD0_RESET#define DEFAULT_DISP_TE_GPIO 81 //GPIO number for TE#define LCD_1V8_EN_GPIO 56#define LCD_2V8_EN_GPIO 31 - +/* LCD IC power gpio +*/ +#define LCD_VDD_EN_GPIO 65 +#define LCD_PWR_EN_GPIO 66 + +/*LCD BL control gpio +*/ +#define LCD_BL_EN_GPIO 33/* Helper macro for supported panels table entry PanelDTInfoType*/#define PANEL_CREATE_ENTRY(_name_,_id_,_dtlable_,_interface_,_cfg_,_timing_,_pll_, _top0_, _top1_, _top2_) \{(_name_), \(_id_), \(_dtlable_), \(_interface_), \(_cfg_), \(_timing_),
7.修改QcomPkg/SocPkg/KamortaPkg/Library/MDPPlatformLib/MDPPlatformLibPanelConfig.h
绑定对应接口
@@ -220,13 +220,23 @@ MDPPlatformPanelFunctionTable sMDPPlatformPanelFunction[MDPPLATFORM_PANEL_MAX] ={ /* Kamorta Panel */MDPPLATFORM_PANEL_KD070D57_C006_720P_VIDEO, // ePanelSelected"Panel_kd070d57_c006_720p_video.xml", // pPanelXmlConfigPanel_Default_PowerUp, // pPanel_PowerUpPanel_Default_PowerDown, // pPanel_PowerDownPanel_Default_Reset, // pPanel_ResetPanel_Default_Peripheral_Power, // pPanel_Peripheral_PowerPanel_Default_Brightness_Enable, // pPanel_Brightness_EnablePanel_Default_Brightness_Level // pPanel_Brightness_Level}, + { /* Kamorta Panel */ + MDPPLATFORM_PANEL_KD080D56_720P_VIDEO, // ePanelSelected + "Panel_kd080d56_720p_video.xml", // pPanelXmlConfig + Panel_Default_PowerUp, // pPanel_PowerUp + Panel_Default_PowerDown, // pPanel_PowerDown + Panel_Default_Reset, // pPanel_Reset + Panel_Default_Peripheral_Power, // pPanel_Peripheral_Power + Panel_Default_Brightness_Enable, // pPanel_Brightness_Enable + Panel_Default_Brightness_Level // pPanel_Brightness_Level + },};#endif // __MDP_PLATFORM_LIB_PANEL_CONFIG__H__
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
