此次移植打算分成两个模块来说,bootloader部分和kernel部分。在实际的移植调试过程中也是这么分成了两个部分分别调试。
高通平台中的bootloader叫做LK(Little Kernel,对于LCM来说LK部分相当重要,它不仅要负责开机部分的LCD显示任务,还要负责传参给kernel的LCM驱动,指导kernel选择合适的LCM参数。
1、LK中LCM启动流程
注:read_panel_id()和read_panel_id_ddr3()为私有添加,非高通库上代码。
在这个流程图中,需要着重了解的有oem_panel_select() mdss_dsi_initialize() 和read_panel_id()函数,这三个函数主要是做lcd兼容,下面来具体看函数内容。
2、oem_panel_select()
这个函数在 android/bootloader/lk/target/msm8916/oem_panel.c文件中
主要是识别不同IC,赋值给参数panel_id,panel_id的使用在同一文件中的 init_panel_data()函数中。
/********************************************************
*Name: oem_panel_select
*Function: selection different lcm panel
*Description: 1)This func will be roaded twice,first time use default value
second time depend on lk_lcd_id value match correct branch.
*Author: Jerry.peng
*********************************************************/
bool oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
struct msm_panel_info *pinfo,
struct mdss_dsi_phy_ctrl *phy_db)
{
uint32_t soc_version = board_soc_version();
uint32_t gpio_state = 0;
gpio_tlmm_config(LCM_GPIO_DETECT, 0, GPIO_INPUT, GPIO_NO_PULL, GPIO_8MA, GPIO_ENABLE);<span style="color:#33ff33;"> </span><span style="color:#009900;">//这个主要是硬件检测lcd_id引脚,用来区分同一IC不同模组厂屏</span>
mdelay(10);
gpio_st