mtk平台LCD驱动调试经验总结

   以mtk6737平台hx8363a的wvga屏举例说明

一、前期准备:

   1、拿到LCD显示屏样品,叫供应商提供屏初始化参数、proch值、芯片数据手册、屏规格书。
   2、找到主板LCD接口相关的硬件原理图。
   3、需要USB转串口的工具,方便查看开机过程的串口log。
   4、正式进入LCD驱动移植前,建议在前一天把系统代码完整编译过一遍(编译userdebug或者eng版本),
     确保刷机后可以开机和打印串口log。

  

二、开始移植LK部分

   1、打开硬件原理图查看LCD接口部分,了解以下几点
     a、给屏供电是用独立的外部2.8V LDO芯片,还是mtk的PMIC输出2.8V。
     b、reset引脚和ID引脚的gpio号(兼容多个屏才需要检测ID引脚)。
     c、这个lcd屏的mipi接口是多少lane,可查看原理图lcd座子上有几组DATA网络,或者咨询负责硬件设计的人员。
     d、建议把供应商提供的屏规格书核对一下,主要查看屏的fpc排线PIN脚和主板原理图中是否能对应上。

   2、将供应商提供的屏初始化参数用UE工具修改成mtk平台的LCM_setting_table格式(如下举例),修改后请多
     核对几遍


	LCM_setting_table格式是: {
    寄存器地址,要发送的参数个数, {
    要发送的参数列表 }},

	假设供应商提供的初始化参数是这样(不同供应商给的参数格式不一样,需要自己仔细观察规律,也可以询问FAE):
		LCM_Write(Gen,0,6,0xFF,
		0x77,
		0x01,
		0x00,
		0x00,
		0x13); 
		LCM_Write(Gen,0,2,0xEF,
		0x08); 

	-->改成LCM_setting_table格式就是:
	   	{
   0xFF,5,{
   0x77,0x01,0x00,0x00,0x13}},
		{
   0xEF,1,{
   0x08}},


    摘取屏驱动.c文件的部分屏初始化代码:
	static struct LCM_setting_table lcm_initialization_setting[] = {
   
		{
   0xFF,5,{
   0x77,0x01,0x00,0x00,0x13}},
		{
   0xEF,1,{
   0x08}},
		{
   0xFF,5,{
   0x77,0x01,0x00,0x00,0x10}},
		{
   0xC0,2,{
   0x63,0x00}},
		{
   0xC1,2,{
   0x10,0x02}},
		{
   0xC2,2,{
   0x20, 0x02}},
		…
	    …
		{
   0x11,1,{
   0x00}},
		{
   REGFLAG_DELAY,120,{
   }},
		{
   0x29,1,{
   0x00}},
		{
   REGFLAG_DELAY,20,{
   }},
		{
   REGFLAG_END_OF_TABLE,0x00,{
   }}
	};

   3、假如供应商没有提供屏驱动.c文件,可以在目录vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm/中
     找一份来复制,文件夹命名为hx8363a_wvga_dsi_vdo_dz

     a、文件夹里面的c文件重命名为hx8363a_wvga_dsi_vdo_dz.c
     b、修改Makefile中为obj-y += hx8363a_wvga_dsi_vdo_dz.o
     c、把前面第2步修改好格式的lcm_initialization_setting初始化参数替换到这个.c文件中
     d、文件命名规则可以是:芯片名称_分辨率简称_dsi_vdo_供应商简称

        常见的屏分辨率:

	qvga	320x240
	vga	 	640x480
	wvga	800x480
	svga	800x600
	qhd	    960×540
	hd720	1280x720
	fhd	    1920x1080

   4、修改c文件中的分辨率宏定义

	#define FRAME_WIDTH  								(480)
	#define FRAME_HEIGHT 								(800)

   5、修改延时和结束的REGFLAG宏定义

	#define	REGFLAG_DELAY             	0xFC(用lcm_initialization_setting中没出现过的值)
	
	#ifdef	REGFLAG_END_OF_TABLE
	#undef	REGFLAG_END_OF_TABLE
	#endif
	#define	REGFLAG_END_OF_TABLE      	0xFD(用lcm_initialization_setting中没出现过的值)

   6、修改c文件最底部的LCM_DRIVER定义,请注意检查名称

	LCM_DRIVER hx8363a_wvga_dsi_vdo_dz_lcm_drv = 
	{
   
	   .name			= "hx8363a_wvga_dsi_vdo_dz",..
	};

   7、修改lcm_init函数

	static void lcm_init(void)
	{
   
	#ifdef BUILD_LK   //这里的上电部分,采用PMIC输出2.8V供电
	pmic_set_register_value(MT6351_PMIC_RG_VIO28_VOSEL, 5);//不同平台PMIC寄存器可能有差异
	pmic_set_register_value(PMIC_RG_VIO28_EN, 1);
	pmic_set_register_value(PMIC_RG_VLDO28_EN_0, 1);
	pmic_set_register_value(PMIC_RG_VLDO28_EN_1, 1);
	#if 0
		mt_set_gpio_mode(GPIO_LCD_POWER_EN, GPIO_MODE_00);//这里面是外部2.8V LDO的控制方式
		mt_set_gpio_dir(GPIO_LCD_POWER_EN, GPIO_DIR_OUT);
		mt_set_gpio_out(GPIO_LCD_POWER_EN, GPIO_OUT_ONE);//拉高使能脚
	#endif
	#endif
	MDELAY(20);
	SET_RESET_PIN(1);//复位引脚拉高
	MDELAY(10);
	SET_RESET_PIN(0);//拉低
	MDELAY(10);
	SET_RESET_PIN(1);//拉高
	MDELAY(120); //这里一般延时120ms
	push_table(lcm_initialization_setting, sizeof(
  • 12
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值