手机驱动工程师基础知识教程

  • 格式:pdf
  • 大小:255.12 KB
  • 文档页数:41

MTK Android Driver知识大全时间 2014-11-08 23:24:37 ? CSDN博客原文 /cbk861110/article/details/40931835转载请注明出处:/cbk861110/article/details/40931835一、Display1.lcm 相关概念1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口)、DPI(也叫RGB接口)、DSI.在使用DSI接口时,目前75/77都只支持到2条data lane,加上一条clock lane.使用DPI接口时,根据LCM IC支持的情况,可以选择16bus、18bus传输RGB格式文件,在GPIO部分分为R、G、B 分别对应 8个GPIO(GPIO20~46期间),客户采用DPI接口需要根据选择的bus方式进行配置,推荐RGB端口全部配置为对应的复选模 式,并设置为OUT输出。

采用DBI接口,有两种模式选择,一种是选择共用DPI的bus脚 +DPI控制线,另一种是共用nand data pin+CPU 控制线。

1.2) DSI接口有两种sync 模式:video mode和command mode,其中video mode是BB端一直刷数据到LCM,cmd mode是在有数 据更新时刷数据到LCM GRAM中)和DSI command mode相比,video mode 是需要实时传输image data到lcm端,DSI 的refresh rate决定了lcm1.3)EDS机制:92平台LCM driver中定义了esd_check和esd_recovery的接口,但ESD线程不工作。

目前在MT6589之前平台,video mode的ESD实现有三种模式,分别是:ext TE(外部TE信号检测)、int TE(内部TE信号检 测)、non cout clk不同ESD方式需要注意的方面a) int TE和ext TE的检测,都不需要实现lcm_esd_check函数,而需要实现lcm_esd_recover函数。

non cont clk则不需要实现lcm_esd_check函数和lcm_esd_recover函数,而只需要在上面 params中配置为TRUE即可b) ext TE的实现,需要LCM外接TE pin到BB端,同时在inital code中配置寄存器打开TE信号的输出 (一般是写0x35寄存器,具体需要和LCM IC FAE确认)1.4)HDMI/MHL:目前我司HDMI/MHL的相关code和driver都是有集成在codebase中的,要使用的话,只需要只需要在对应的 ProjectConfig.mk文件中开启,并且在dct中配置好对应的引脚定义即可。

以下以MHL为例:ProjectConfig中配置:MTK_HDMI_SUPPORT=yes #表明开启HDMI/MHL功能CUSTOM_KERNEL_HDMI=Sii8338 #表明配置为MHL的IC型号1.4)TE 信号:大部分TE问题是由于没有正常开启TE所导致,首先检查TE是否开启。

89平台使用内部TE,lcm driver中只需要在init过程中打开LCM TE即可,一般是写0x35寄存器,部分IC需要额外写其他 寄存器,可与FAE确认。

检查TE是否正常开启,如果是工版,则可使用如下方式打开fps的log,查看TE信息:adb shellcd sys/kernel/debugecho fps:on>mtkfb然后查看mtklog, 搜索“FPS”,若看到等待TE时间为0, 表示TE未正常开启,需要与LCM IC的FAE进一步确认开启流程 。

若TE已经成功开启,依然有Teering现象,可从如下方面思考分析。

1)是否使用了竖屏横用,导致对GRAM的读写方向不一致,一般会出现斜线切屏现象。

2)是否clock速度过低,FPS低于LCM自刷新率的1/2?3)是否clock速率过快,超过LCM的自刷新率,导致写GRAM时可能从后面赶上读,导致Teering发生。

HS:high speed , clock切为HS模式,高速模式。

LP:low power,低电平有些LCM在开机的时候,如果使用LP下发init code,可能会不准确或者导致花屏等问题,这时候需要使用HS mode发送init code,比如三星的某款OLED(D53D6EA8061V-Amoled)。

continuous clock/no-continuous clock模式1.6)dithering:抖动显示技术:MT6572 如所用lcm不支持RGB888 color format, 显示效果差需要开启dithering的。

1.7)其他概念:AAL:BB端CABC(即AAL),为1种方式控制背光continuous clock/Non-continuous clock : Switch clock lane from HS to LP2.LCM时钟配置MT6582 LCM Driver中配置:params->dsi.PLL_CLOCK = 234;计算方法:如果MIPI Clock对RF/WCN产生干扰,并且在尝试寻找相应的频点依然无法解除 EMI,可以尝试做Frequency Hopping;82平台默认打开展频开关,不同于72/89平台,将展频的开关以及展频幅度的选择 ,都开放到LCM Driver中,以如下为例:params->dsi.ssc_range =4;params->dsi.ssc_disable = 0;代表:展频打开,ssc_range = 4%3.AAL与CABC背光选择(两种方式控制背光):参考[FAQ05966]89平台支持BB端CABC(即AAL)或LCM端CABC方式控制背光,两种方式使用方法如下【BB端CABC(即AAL)】- 打开功能,向MTK申请patch,并在ProjectConfig.mk中打开MTK_AAL_SUPPORT = yes【LCM端CABC】- 对于Video Mode,ALPS.JB2.MP.V1.3(包括1.3)之前的版本,请向MTK申请patch- lcm driver中实现set_backlight接口- cust_leds.c(包括lk与kernel中的两支文件)设置如下4. 调整Display 消耗的BW(bandwidth带宽)方法:?LCM driver建议如下:–MIPI的clock 尽量低,建议60fps–For DSI Video mode,建议不要使用burst mode(比较能吃BW)params->dsi.mode = BURST_VDO_MODE;–Video mode的时序,blank 区间(如VBP/VFP/HBP/HFP)尽量少(当然也需要满足LCMmodule的spec)5.DSI video mode相关参数配置方法:对应配置文件:\alps\mediatek\custom\common\kernel\lcm\xxxx.c中lcm_get_params()函数1,data lane每帧回LP11(Low Power state,dp,dn都为高电平),clk一直HS( High Speed),对应配置:params->dsi.cont_clock=1;params->dsi.clk_lp_per_line_enable=0;2,data lane每一行回一次LP11,clk lane每一帧回一次LP,对应配置:params->dsi.clk_lp_per_line_enable=0;3,data lane和clk lane都是每行回一次LP11,对应配置:params->dsi.cont_clock=0;params->dsi.clk_lp_per_line_enable=1;6.LCM CABC 配置参考[FAQ12413]7.MHL 卡顿问题8.ESD机制各个平台的差异:对于89/72/82等新平台,Display架构做了调整,ESD的实现方式与之前的75/77等平台稍有差异。

对于之前75/77平台,可以参考FAQ03210及FAQ05163.新旧架构下,主要是DSI Video Mode下ESD方式不一样。

之前的架构下Video Mode的屏采用检测外部TE或者内部TE来做ESD Check,因此需要在lcm driver中配置相应的参数。

新架构下不支持外部TE或内部TE来做ESD check, lcm_get_params中关于esd的参数不用再配置。

[SOLUTION]新的Display架构下,DSI Video Mode及DSI Command Mode都采用读寄存器的方式来进行esd check.因此都只需要在lcm driver中实现esd_check和esd_recover函数即可。

对于具体读取哪些寄存器来进行esd check,需要与屏厂确认。

ESD实现后如果出现每两秒闪屏的问题,可以按如下流程处理:1. 首先检查esd check中是否添了过多的log信息或者有delay操作,建议先去掉所有log测试。

2. 如果依然出现每两秒闪屏,可参考FAQ05680和FAQ05681进行处理。

9.DBI/DPI接口的GPIO的配置情况DBI:DBI接口分为串行和并行两种。

由lcm_params->ctrl这个参数控制。

LCM_CTRL_SERIAL_DBI/LCM_CTRL_PARALLEL_DBI1.)如果是serial类型的,是通过MT6572 datasheet里面的0x14012028 DBI_SCNF (DBI Serial Interface Configuration Register)这个寄存器来config串行接口。

比如使用LSDI还是LSDA,LSCK上升沿还是下降沿发送数据 ,LSCK在没有数据的时候是LOW/HIGH.配置几个GPIO pin:LSCE0B(相当于数据使能信号,低电平有效), LSCK, LSDA/LSDI(传送command时用),DBI[XX:0](传 送data时用)(这两个时间之内是不会传数据的,Invalid data)2.)如果是Parallel类型的,配置几个GPIO pin:LPCE0B(相当于CS信号,低电平有效), LPA0(RS信号,MTK平台上面和CS信号是同步的), LCD CLK,LPWRB/LPRDB(类似数据使能信号)和DBI[XX:0](复用DPI的data pin,传送data和command时用)写的时候用LPWRB,读的时候用LPRDB有C2WS和C2WH两个变量:chip selection to write setup time和chip selection to write hold time同理C2RS和C2RH.硬件连接:DBI Parallel类型:BB端需要打开LRDB、LWRB、LPA0 pin脚复用功能,并连接到LCM的RD、WR、RSDBI serial类型: BB端需要打开LSCE0B、LSCK、LSDA/LSDI pin脚复用功能, 并连接到LCM的CSX, SCL,SDA/DOUT/DINlcm Driver里面变量write wait state time,是处于wait状态的时间。