1、添加屏幕类型定义
vendor\qcom\nonhlos\BOOT.XF.4.2\boot_images\QcomPkg\Include\Library\MDPPlatformLib.h
枚举类型MDPPlatformPanelType表示LCD ID
MDPPLATFORM_PANEL_MAXMDPPLATFORM_PANEL_MAX:决定了支持的最大屏幕数量
2、添加屏幕类型和它的xml文件
vendor\qcom\nonhlos\BOOT.XF.4.2\boot_images\QcomPkg\SocPkg\MannarPkg\Library\MDPPlatformLib\MDPPlatformLibPanelConfig.h
#define MDP_PLATFORM_PANEL_FUNCTION_ENTRY2(_panelselection_, _panelgpio_, _xmlconfig_) //Macro definition with 3 parameter to simplify sMDPPlatformPanelFunction
#define MDP_PLATFORM_PANEL_FUNCTION_ENTRY3(_panelselection_, _panelgpio_, _xmlconfig_)\
{\
(_panelselection_),\
(_panelgpio_),\
(_xmlconfig_),\
Panel_Default_PowerUp,\
Panel_Default_PowerDown,\
Panel_Default_Reset,\
NULL,NULL,NULL
}
The Peripheral_Power / Brightness_Enable / Brightness_Level are set to NULL by default.(也就是一些函数指针,回调函数)
补充:使用MDP_PLATFORM_PANEL_FUNCTION_ENTRY3
超链接文件:MDPPlatformPanelFunctionTable结构体说明
在“MDP_PLATFORM_PANEL_FUNCTION_ENTRY3”中填入panel供电,背光等函数信息。这里添加I2C外设power函数定义,主要是要对偏压控制的I2C进行初始化和配置,默认的Peripheral_Power(外围电源)不满足此要求;除此外还有两个使能AVDD、AVEE的GPIO,需要重新定义:
具体上电方式
/boot_images/QcomPkg/SocPkg/StraitPkg/Library/MDPPlatformLib/MDPPlatformLibPanelCommon.c
提供的默认基础功能函数:
Panel_Default_LCD_PowerUp 上电
Panel_Default_LCD_PowerDown 下电
Panel_Default_Peripheral_Power 使用默认的背光
Panel_I2C_Peripheral_Power使用I2C控制背光
Panel_Default_LCD_Brightness_Enable 背光使能端
qcom_lcd_超链接文件Panel_I2C_Peripheral_Power.c
I2C相关的配置
定义要写的I2C cmd, 0x3E是I2C地址
AVDD AVEE定义 /boot_images/QcomPkg/SocPkg/StraitPkg/Library/MDPPlatformLib/MDPPlatformLibPanelCommon.c
sDefaultMDPPanelGpio
定义上电的头文件
/boot_images/QcomPkg/SocPkg/StraitPkg/Library/MDPPlatformLib/MDPPlatformLibPanelCommon.h
DSI_READ_READBACK_SIZE
Panel_PowerCtrlParams
MDPPlatformPanelGpioType
3、添加屏幕的配置xml文件
vendor/qcom/nonhlos/BOOT.XF.4.2/boot_images/QcomPkg/Settings/Panel
也就是一些屏幕参数配置。如porch、分辨率、上电code、背光
上电code
<DSITermSequence>
</DSITermSequence> 这部分是下电 code
4、fdf文件中生成file语句
vendor/qcom/nonhlos/BOOT.XF.4.2/boot_images/QcomPkg/SocPkg/MannarPkg/LAA$ vi Core.fdf
uuid可以通过Linux平台下的uuidgen命令获得
vendor/qcom/nonhlos/BOOT.XF.4.2/boot_images/QcomPkg/SocPkg/MannarPkg/LAB$ vi Core.fdf也需要添加
5、动态屏检测列表中添加屏幕信息
vendor\qcom\nonhlos\BOOT.XF.4.2\boot_images\QcomPkg\SocPkg\MannarPkg\Library\MDPPlatformLib\MDPPlatformLib.c //uefiPanelList
Msm8916只有一个mipi-dsi接口用于连接LCM,由MDP(mobile display processor)进行管理
6、在平台支持屏幕列表中添加屏信息
vendor\qcom\nonhlos\BOOT.XF.4.2\boot_images\QcomPkg\SocPkg\MannarPkg\Library\MDPPlatformLib\MDPPlatformLib.c
添加新屏到panelist
其中PANEL_CREATE_ENTRY将新的panel类型与我们准备好的panel XML文件关联起来,
在 MDPPlatformConfigure 中配置显示
上面只是添加一个数组元素,真正的绑定操作在MDPPlatformConfigure()接口中。MDPPlatformConfigure()接口是DXE阶段的核心,在DisplayDxe中通过DisplayDxeInitialize()接口不断调用MDPPlatformConfigure()完成panel的选路、初始化、上下电。
MDPPLATFORM_CONFIG_SW_RENDERER:软件渲染
在 SetupPlatformPanelConfig 函数里选定要使用的 panel 节点
FindPanelIndex 选择 panel 时序,如果需要添加新 panel,则添加到
sMDPPlatformPanelFunction 中即可,这样就可以将新添加的 xmldata 添加到
panellist
代码路径: boot_images/QcomPkg/SocPkg/MannarPkg/Library/MDPPlatformLib/
MDPPlatformLibPanelConfig.h
MDPPLATFORM_CONFIG_GETPANELCONFIG: 获取 panel 配置,MDP_DISPLAY_PRIMARY MDP_DISPLAY_EXTERNAL 在这里可以支持双屏
MDPPLATFORM_CONFIG_POWERUP panel上电
MDPPLATFORM_CONFIG_SETBACKLIGHT 设置背光
i2c操作屏幕上电函数
头文件:/boot_images/QcomPkg/Include/Library/MDPPeripherals.h
代码实现:/boot_images/QcomPkg/Library/MDPLib/MDPPeripherals.c