安卓5.1源码 lcd驱动移植

Kernel部分:/kernel-3.10/drivers/misc/mediate/lcm

#define FRAME_WIDTH                                                                                             (720)
#define FRAME_HEIGHT                                                                                             (1280)  //分辨率修改
 
static structLCM_setting_table lcm_initialization_setting[] = {
         //初始化代码修改为p43厂商给的初始化代码;
}
 
static voidinit_lcm_registers(void)
{
         //寄存器函数删除掉;
}
 
static struct LCM_setting_tablelcm_sleep_out_setting[] = {
   //Sleep Out
   {0x11, 1, {0x00}},
   {REGFLAG_DELAY, 120, {}},
 
   // Display ON
   {0x29, 1, {0x00}},
   {REGFLAG_DELAY, 20, {}},
   {REGFLAG_END_OF_TABLE, 0x00, {}}
};
 
static struct LCM_setting_tablelcm_deep_sleep_mode_in_setting[] = {
   
   // Display off sequence
   {0x28, 1, {0x00}},
   {REGFLAG_DELAY, 20, {}},
 
   // Sleep Mode On
   {0x10, 1, {0x00}},
   {REGFLAG_DELAY, 120, {}},
   {REGFLAG_END_OF_TABLE, 0x00, {}}
};
 
static void lcm_get_params(LCM_PARAMS*params)
{
         memset(params,0, sizeof(LCM_PARAMS));
         params->type   = LCM_TYPE_DSI;
 
         params->width  = FRAME_WIDTH;
         params->height= FRAME_HEIGHT;
         //enable tearing-free
         params->dbi.te_mode                              =LCM_DBI_TE_MODE_VSYNC_ONLY;
         params->dbi.te_edge_polarity                 = LCM_POLARITY_RISING;
 
#if (LCM_DSI_CMD_MODE)
                   params->dsi.mode   = CMD_MODE;
#else
                   params->dsi.mode   =SYNC_PULSE_VDO_MODE; //SYNC_PULSE_VDO_MODE;//BURST_VDO_MODE;
         //params->dsi.mode   = BURST_VDO_MODE;
#endif
 
         //DSI
         /*Command mode setting */
         params->dsi.LANE_NUM                                     =LCM_FOUR_LANE;  //这句函数对应你的lcd修改
         params->dsi.data_format.format                      =LCM_DSI_FORMAT_RGB888;
 
         //videomode timing
         params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888;
 	//前后阶参数查看datashift;
	params->dsi.vertical_sync_active                               = 10; //8; //2;
	params->dsi.vertical_backporch                                           = 20;//18;        //14;
	params->dsi.vertical_frontporch                                          = 10;//20;        //16;
 	params->dsi.vertical_active_line                                =FRAME_HEIGHT;
 	params->dsi.horizontal_sync_active                                   = 40;         //2;
	params->dsi.horizontal_backporch                                     =100;//120;     //60;         //42;
	params->dsi.horizontal_frontporch                                     = 80;//100;       //60;         //44;
	params->dsi.horizontal_active_pixel                                  = FRAME_WIDTH;
 
	params->dsi.PLL_CLOCK= 175;//208; 210      //查看datashift;
}
void lcm_display_on(void)
{
         //去掉这段函数;
}
static void lcm_init(void)
{
        
 
         SET_RESET_PIN(1);
         MDELAY(10);
         SET_RESET_PIN(0);
         MDELAY(10);
         SET_RESET_PIN(1);
         MDELAY(120);
   	 push_table(lcm_initialization_setting,sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table), 1);
         (init_lcm_registers();
         lcm_display_on();) //去掉这两句;
   	LCD_DEBUG("uboot:boe_nt35521_lcm_init\n");
}
static structLCM_setting_table lcm_backlight_level_setting[] = {
         //去掉这段函数;
}
static voidlcm_setbacklight(unsigned int level)
{
         //去掉这段函数;
}
static unsigned int lcm_compare_id(void)
{
         //本函数最后返回了一个ID屏蔽掉这一句;
         return (ID == 0x9881)?1:0;
}

Lk:bootable/bootloader/lk/dev/lcm

Lk修改方法和kernel修改方法相同但是注意lk修改的地方尽量在lk里面去修改kernel修改的地方也在kernel里面去修改切不可同文件互用。


lk:

    在内核目录下bootable/bootloader/lk/dev/lcm/下存放的是各种lcm厂商的lcm驱动,其中也有一个mt67xx_lcm_list.c文件,里面定义了所有的lcm驱动)

1.移植是首先要在lcm/目录下建立一个所移植的那个lcm屏的目录文件夹,目录文件夹名字选取是根据你所定义的设备名统一。

2.在建的这个目录下添加lcm驱动和makefile文件,如果你有lcm驱动就放在这个目录下,如果没有,就找lcm目录下其他的lcm驱动文件夹中的.c文件进行修改后放在此目录下

3.准备工作做好后,修改文件主要有几个,一个是mt67xx_list.c

    在这个文件中加入你所添加的驱动定义:格式和方法参照文件中其他lcm的定义。

另一个是bootable/blltloader/lk/project/这个目录下有你编译的工程文件(就是你lunch的时候选取的那个文件,Project.mk.mk文件,

    在这个文件下主要修改的是CUSTOM_LK_LCM、和BOOT_LOGO,把这两个修改成你移植的对应的参数,CUSTOM_LK_LCM要和你的文件名,目录名,还有你的.c文件中的.name变量的值统一。logo,以及lcm屏的宽、高,看lcm数据手册。

 

kernel

 kernel/drives/misc/mediatek/lcm/....在这个目录下加入和lk当时候加入的是一样的。直接拷贝过来就可以。同样修改mt67xx_lcm_list.c文件

kernel-3.10/arch/arm64/configs/..目录下是:工程名_debug_defconfig,和对应:工程名_defconfig这两种文件,其中后缀是debug_defconfig的文件是eng对应的,而defconfiguser对应的。

 

(在我们的lunch所打印出来的工程中有三种后缀,eng(调试工程)user(用户工程)userdebug,进入这个文件后,反斜杠搜索/CONFIG_CUSTOM_KERNEL_LCM 然后修改对应的名称和分辨率。


注:以上只是个人意见也可自行修改,亲测成功!

你可能感兴趣的:(Android)