Android MTK LCM Driver 屏驱动

news/2024/11/23 1:39:47/

Android MTK LCM Driver 屏驱动

———— 屏驱动小结
手机驱动调试第一就是LCM,也就是我们说的LCD屏,因此要求驱动第一时间将确认和点亮。此篇就简单描述了在MTK 6765(Android9.0 / kernel-4.9)环境下的驱动的小结。

目录

  • Android MTK LCM Driver 屏驱动
  • 前言
  • 一、驱动相关的文件
    • 1、修改文件和内容简述
  • 二、如何修改驱动
    • 1、驱动文件概述
    • 2、驱动结构体名称修改
    • 3、根据HW连接修改LCM类型、DSI模式、LCM大小配置基本信息
    • 4、屛的初始化参数(需要屛厂给出参数,参数不对会导致花屏现象)
    • 5、配置垂直线,水平像素及相关数据格式设置(对于时序的话,一般要求不高可以不需要改,如要改需要让屛厂提供)
        • @关于PLL_CLOCK的计算
    • 6、实现LCM休眠/恢复功能
  • 三、如何修改系统配置使系统支持
    • 1、概述
    • 2、LK部分
    • 2、kernel部分
  • 四、小结


前言

屏是三大件中最首要器件,这里最该器件的驱动部分做个小结

提示:以下是本篇文章正文内容,下面案例可供参考


一、驱动相关的文件

1、修改文件和内容简述

我以表格的形式描述出来,请见下表:

文件路径控制内容
device/mediateksample/k65v1_64_bsp/ProjectConfig.mk配置系统Hal和Kernel的IMGSENSOR名称、分辨率、图片包,修改要全编译。
kernel-4.9/arch/arm64/configs/k65v1_64_bsp_defconfig配置用户LCM驱动的名称和分辨率
kernel-4.9/arch/arm64/configs/k65v1_64_bsp_debug_defconfig为debug版本配置用户LCM驱动的名称和分辨率debug版本
kernel-4.9\drivers\misc\mediatek\lcm\mt65xx_lcm_list.c内核定义驱动文件夹的宏对应驱动接口,注意大小写
kernel-4.9\drivers\misc\mediatek\lcm\mt65xx_lcm_list.h内核引用驱动函数声明
kernel-4.9\drivers\misc\mediatek\lcm\hx8394_dsi_hd_4line\hx8394_dsi_hd_4line.c内核添加驱动文件夹以及驱动文件
kernel-4.9\drivers\misc\mediatek\lcm\hx8394_dsi_hd_4line\Makefile内核驱动编译文件添加obj-y += hx8394_dsi_hd_4line.o
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\mt65xx_lcm_list.cbootload层驱动文件夹的宏对应驱动接口,注意大小写
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\hx8394_dsi_hd_4line\hx8394_dsi_hd_4line.cbootload层添加驱动文件夹以及驱动文件
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\hx8394_dsi_hd_4line\Makefilebootload层添加驱动编译文件添加obj-y += hx8394_dsi_hd_4line.o
vendor\mediatek\proprietary\bootable\bootloader\lk\project\k65v1_64_bsp.mkbootload层配置用户LCM驱动的名称

二、如何修改驱动

1、驱动文件概述

首先,MTK平台的显示驱动分两块,一块在LK代码里面,一块在kernel代码里。

------ LK的lcm驱动路径在:

vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\xxxx_hd720_dsi_vdo

------- kernel的lcm驱动路径在:

kernel-x.x\drivers\misc\mediatek\lcm\xxxx_hd720_dsi_vdo

1、lcm驱动中,最主要的是了解该结构体中的成员函数运行过程。开机启动会首先跑LK的中LCM驱动的.get_params和.init 给LCM模组进行初始化,其作用的生命周期一直到系统启动完成后,短按开机键或者自动休眠完成。
2、重新唤醒之后,就跑kernel 中LCM驱动中的.suspend和.resume。
3、LK和kernel中的驱动文件虽然大体一样,但是是有数据类型等差别的,不能完全互相拷贝。
4、要注意的是在调试过程中,如果LK和kernel中的参数不一样(比如分辨率、型号名)开机系统会重启。

2、驱动结构体名称修改


......
LCM_DRIVER xxxx_hd720_lcm_drv =
{.name            ="xxxx_hd720_lcm_drv",   //LCM 的型号名,lk的型号名和kernel 型号名必须保持一致,否则会重启;.set_util_funcs = lcm_set_util_funcs,.get_params     = lcm_get_params,    	//lcm 显示和mipi 时序参数配置,.init           = lcm_init,             //lcm 的初始化参数.suspend        = lcm_suspend,          //休眠.resume         = lcm_resume,           //唤醒.compare_id    = lcm_compare_id,  		//LCM ID 获取,只有在lk有效,lk在启动阶段会调用该接口,通过返回值来判断当前lcm模组与驱动匹配,用于多模组时驱动兼容设计
};

3、根据HW连接修改LCM类型、DSI模式、LCM大小配置基本信息

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

4、屛的初始化参数(需要屛厂给出参数,参数不对会导致花屏现象)

static struct LCM_setting_table lcm_initialization_setting[] = {
// 屏幕配置初始化{0xff,5,{0x77,0x01,0x00,0x00,0x10}},                                                               {0xC0,2,{0x63,0x00}},                                                                             {0xC1,2,{0x11,0x02}},                                                                             {0xC2,2,{0x31,0x08}},   
.........{0xff,5,{0x77,0x01,0x00,0x00,0x00}},   {0X29,0,{}},//以下一般不用改                                       
{0x11,01,{0x00}},
{REGFLAG_DELAY, 120, {}},  
{0x29,01,{0x00}},       
{REGFLAG_DELAY, 20, {}},  
{REGFLAG_END_OF_TABLE, 0x00, {}}
};

5、配置垂直线,水平像素及相关数据格式设置(对于时序的话,一般要求不高可以不需要改,如要改需要让屛厂提供)

static void lcm_get_params(LCM_PARAMS *params)
{
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;
#elseparams->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_TWO_LANE;//修改mipi通道数,根据实际模组打样来配置(询问FAE得知)
params->dsi.data_format.format      = LCM_DSI_FORMAT_RGB888;
//video mode timing
params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888;params->dsi.vertical_sync_active        = 4;//垂直同步信号的宽度
params->dsi.vertical_backporch        = 16;//垂直同步信号的后沿
params->dsi.vertical_frontporch        = 20;//垂直同步信号的前沿,可调节竖屏 上线白线条,闪屏
params->dsi.vertical_active_line                                = FRAME_HEIGHT;params->dsi.horizontal_sync_active                        = 10;
params->dsi.horizontal_backporch                        = 78;
params->dsi.horizontal_frontporch                        = 80;
params->dsi.horizontal_active_pixel                        = FRAME_WIDTH;params->dsi.PLL_CLOCK = 180;//lcm的频率,更据实际情况改动,这个一般mtk的都会影响gps的信号强弱。        }

@关于PLL_CLOCK的计算

1、DSI vdo mode下的数据速率data_rate的大致计算公式为:
(Data rate) = (height + vsa + vbp + vfp) * (width + hsa + hbp + hfp) * total_bit_per_pixel * frame_per_second / total_lane_num

2、DSI cmd mode下的数据速率data_rate的大致计算公式为:
(Data rate) = widthheight1.2* total_bit_per_pixel*frame_per_second/total_lane_num

参数注释:
data_rate : 表示的是数据速率
width,height :屏幕分辨率
VSA VBP VFP :DSI vdo mode的vertical porch配置参数
HSA HBP HFP :DSI vdo mode的horizontal porch配置参数
total_bit_per_pixel :表示的是一个pixel需要用几个bit来表示,比如RGB565的话就是16个bit/RGB888就是24bit
frame_per_second :就是我们通常看到的fps,叫做帧率,表示每秒发送多少个帧,一般是60帧每秒
total_lane_num :表示的是data lane

DSI采用的是双边采样,则clk等于数据速率的一半,也就是说一个clk周期内传送2位,所以你计算出来的值还要除以2,即PLL_CLOCK(clk )= Data rate/2;

6、实现LCM休眠/恢复功能

static void lcm_suspend(void)
{push_table(lcm_deep_sleep_mode_in_setting, sizeof(lcm_deep_sleep_mode_in_setting) / sizeof(struct LCM_setting_table), 1);SET_RESET_PIN(0);MDELAY(10);SET_RESET_PIN(1);MDELAY(10);SET_RESET_PIN(0);MDELAY(120);static void lcm_resume(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);
}

三、如何修改系统配置使系统支持

1、概述

要了解清楚本身本身的硬件特性:
(1)、比如分辨率最高支持到多少?(MTK平台还比较关心当前的LCM显示屏是物理竖屏还是物理横屏,MTK的手机平台有默认不支持竖屏之说)
(2)、最多能支持几通道的mipi-DSI?

2、LK部分

LK部分 如何添加新lcm型号支持呢?
(1)、将新LCM的驱动hx8394_dsi_hd_4line文件夹放在

vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\

(2)、添加LCM的驱动型号到lcm_list中,修改文件如下,注意大小写:

vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\mt65xx_lcm_list.c

extern struct LCM_DRIVER hx8394_dsi_hd_4line;
......LCM_DRIVER *lcm_driver_list[] = {
#if defined(HX8394_DSI_HD_4LINE)&hx8394_dsi_hd_4line,
#endif

(3)、将新lcm的文件型号添加到lk的配置文件中,可以有多个:

vendor\mediatek\proprietary\bootable\bootloader\lk\project\k65v1_64_bsp.mk

在CUSTOM_LK_LCM添加你要添加的屏型号,比如:CUSTOM_LK_LCM="ili9881c_hd720_dsi_vdo hx8394_dsi_hd_4line "

2、kernel部分

在Kernel部分,添加新lcm型号支持步骤:
1.将LCM的驱动型号添加到lcm_list.c中:

kernel-4.9\drivers\misc\mediatek\lcm\mt65xx_lcm_list.c

LCM_DRIVER *lcm_driver_list[] = {
#if defined(HX8394_DSI_HD_4LINE)&hx8394_dsi_hd_4line,
#endif

3.在lcm_list.h中添加LCM名称:

kernel-4.9\drivers\misc\mediatek\lcm\mt65xx_lcm_list.h

extern struct LCM_DRIVER hx8394_dsi_hd_4line;

4.修改配置文件中的LCM名称和分辨率:
带debug的是debug版本,没有debug 的是release版本,如果无所谓就都配置上去吧。

kernel-4.9/arch/arm64/configs/k62v1_64_bsp_debug_defconfig
kernel-4.9/arch/arm64/configs/k62v1_64_bsp_defconfig

修改内容可以配置多个,但是要注意前面一个驱动是先遍历的,如果没有把握就将添加的驱动设置在第一个在驱动获取ID时返回1。

CONFIG_CUSTOM_KERNEL_LCM="ili9881c_hd720_dsi_vdo hx8394_dsi_hd_4line lt8912b_mipi_to_lvds"
CONFIG_LCM_HEIGHT="1280"
CONFIG_LCM_WIDTH="720"

四、小结

在调试LCD时,我们在多次验证和调试过程中会遇到各种问题,小结了一些经验:
1、要注意避免使用坏屏,避免使用芯片不对应的屏。
2、因为需要全编译,可以先使用其他OK的屏驱动替换新驱动来调试,就不要更改配置和全编译了。
3、可以先找供应商要对应的驱动程序调试。
3、添加log打印找问题。


http://www.ppmy.cn/news/435751.html

相关文章

MTK平台Camera驱动流程分析

Camera成像原理 景物通过镜头生成的光学图像投射到图像传感器上,然后转为模拟的电信号,经过A/D模数转换器后转换成数字信号,再把数字信号传输到DSP数字信号处理芯片加工处理,再通过IO接口传输到CPU中处理,再通过LCSD就…

MTK LCM驱动移植

对于LCM驱动移植,一般分为三部曲: 1、硬件IO口配置; 2、确保LCM背光能够正常点亮; 3、LCM驱动移植; 硬件电路: 1、GPIO配置 打开 mediatek\dct\DrvGen.exe 选择 mediatek\custom\xiaoxi\kernel\dct\d…

联发科最新资料下载:MT6771 ATM’s

MT6771 ATM’s是联发科最新的开发资料,供工程师参考和学习,本资料来自一牛网论坛! Outline What is ATM’s TuningAutoGen Tool Tuning Custom Refine IdxMgr UT Log of debug Appendix 1 What is ATM’s 先进的调谐映射系统 使用NVRAM…

MTK camera驱动浅析(1)

目录 一.主要文件 二.camera框架中的结构 三.camera驱动初始化流程 一.主要文件 1.文件路径 kernel-4.19/drivers/misc/mediatek/imgsensor/src/common/v1/ 2.文件内容介绍 二.camera框架中的结构 整个框架的关键结构体是IMGSENSOR,可以看到它包含了IMG…

mtk最新刷机平台SP_Flash_Tool_v6.2208_Win

SP Flash Tool v6.2208是一款针对Windows电脑的小应用,可以让你在联发科芯片组驱动的设备手机 平板上刷新或安装rom固件 无论是智能手机、平板电脑还是功能手机。它还允许 您刷新或安装自定义恢复(CWM/TWRP)、引导文件,并从联发科设备中移除工厂重置保护…

mtkwin10驱动_联发科MTK刷机驱动(支持WIN10)驱动

这是联发科MTK刷机驱动(支持WIN10)驱动,能够帮助电脑连接MTK系统的智能手机,拥有ADB联机驱动和刷机驱动自动安装版,并且兼容win7系统。‍ 驱动介绍 本驱动由本站独家制作的MTK全系列刷机驱动。 适用于全系列MTK芯片的COM口刷机驱动,包括手机,手表等设备。 支持WINXP,WIN7…

MTK 安卓核心板 / 安卓开发板 4G/5G 核心板相关方案定制

安卓核心板是将核心功能封装的一块电子主板,集成芯片、存储器和功放器件等,并提供标准接口的芯片。接口主要包括 LCD 电路,Camera 电路,USB 电路,SIM 电路,键盘电路等接口电路,内置主控芯片和内…

mtkwin10驱动_MTK手机刷机驱动下载|MTK通用USB刷机驱动 Win7/Win10 自动安装版 下载_当下软件园_软件下载...

MTK通用USB刷机驱动是一款非常好用联发科MTK处理器刷机驱动程序。之前有不少用户表示自己无法正常进行刷机操作,这是因为没有安装程序的原因,现在下载安装之后,电脑就可以和MTK系统的智能手机正确连接进行操作,支持Win7/8/10操作系…