https://blog.csdn.net/sinat_34606064/article/details/77921323
https://www.cnblogs.com/biglucky/p/4142505.html
LCD driver的框架以msm8909为例。
LCD命名规则例如:
nt35521-720p-video nt35521-wxga-video nt35590-qvga-cmd otm8018b-fwvga-video ili9806e-fwvga-video_pixi445_tf hx8379c-tdt-fwvga-video ……名称 = LCD的IC型号+ 该driver下屏的分辨率+ MIPI接口+ 接口下的模式+ 屛厂供应商+ 项目名
以上参数的含义:
分辨率会有:720p,fwvga,wvga,hd……(分别指的是:720*1280和856*480,1024*600,1280*720)
供应商:truly,TFT,TDT,BYD……
LCD的接口一般又分为:dsi,dbi,dpi
其中DSI MIPI接口,MIPI联盟推出的一种高速低耗接口,根据是否有缓存分为:
CMD:Command Mode
VDO:Video Mode
MIPI对于MIPI下的接口,CMD对应MPU接口,而VDO接口是对应的RGB接口。在VDO模式下视频数据只能通过HS mode传输。
MIPI很多参数是需要根据LCD的datasheet来计算的,其中HFP,HBP,VFP,VBF都是以同步信号(HSYNC和VSYNC)为基准计算。
在同步信号之前为Front,在之后为Back。需要注意的是,这里并不是以有效像素为基准。
关于DSI bit clock(MIPI)的计算,在dtsi中的参数描述为:qcom,mdss-dsi-panel-clockrate=<>,一般情况该值都不建议修改。
因为SRC files文件会根据porch,resolution以及fps来计算。如果由于RF信号干扰或者其他情况需要更改的话,建议是从porch或者fps实现。
LCD的fps一般都上限为60,正常使用时候一般设置为58,因为由于LCD panel range存在刷新率温度漂移情况,所以在dtsi中关键panel-framerate都不建议修改。
BacklightLCD的开机在整个开机的时候是使用的是LK的initial code,只有在开机后睡眠唤醒后才会去调用kernel的参数。正常情况背光分为32阶,并且最大亮度设置为255(dtsi),针对背光还需要验证的是在开机关机休眠唤醒的时候,initial code和背光亮起的时候要搭配协调。否者会造成闪屏白屏等现象。
其次,要注意LCD的背光芯片操作背光的方式,一般分为两种模式,一种是GPIO口直接操作的,一种是以PWM的MPP来操作的。对于GPIO操作的配置在mtp。dtsi中可以参考如下:
&pmx_mdss { qcom,num-grp-pins = <2>; qcom,pins = <&gp 25>, <&gp 17>; }; &mdss_dsi0 { qcom,dsi-pref-prim-pan = <&dsi_ili9806e_fwvga_video>; //qcom,dsi-pref-prim-pan = <&dsi_ili9806e_fwvga_video_tdt>; pinctrl-names = "mdss_default", "mdss_sleep"; pinctrl-0 = <&mdss_dsi_active &mdss_te_active>; pinctrl-1 = <&mdss_dsi_suspend &mdss_te_suspend>; // qcom,platform-bklight-en-gpio = <&msm_gpio 37 0>; qcom,platform-reset-gpio = <&msm_gpio 25 0>; qcom,platform-blk-ctrl-gpio = <&msm_gpio 17 0>; //modify by ke.li@tcl.com for LCD is ili9806e ,and the RST&backlight Ctrl had changed [End]--- 2015.8.28 };而PWM的方式主要配置如下:
mpp@a100 { /* MPP 2 */ /* Backlight PWM */ // qcom,mode = <1>; /* Digital output */ // qcom,invert = <0>; /* Disable invert */ // qcom,src-sel = <4>; /* DTEST1 */ // qcom,vin-sel = <0>; /* VPH_PWR */ // qcom,master-en = <1>; /* Enable MPP */ status = "disabled"; };而以上具体采用哪一种配置方法的选择是在本身dtsi中如下配置:
qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_gpio"; //qcom,mdss-dsi-bl-pmic-pwm-frequency = <33>; //qcom,mdss-dsi-bl-pmic-bank-select = <0>; //qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>; CABL说到背光的话,还有一个算法与之有关系,是CABL,在mtk也叫CABA。
平台端的CABL功能算法是用于LCD背光灯相关计算,在更新灰阶前,处理出现不连续不均匀等的状况。当然该算法也可以回导致LCD出现灰阶部分会有波纹以及短暂的不连续的条纹情况。该配置是在system.prop中可以配置。在MTK是需要在perjectconfig中配置MTK_AAL_SUPPORT=Y.
ili9806e : The CABC (Content Adaptive Brightness Control) dynamic backlight control function is used to reduce the power consumption of the luminance source.
Initial codeLCD还有很大的一块是initial code,这块主要是依靠FAE,因为不同的ic有不同的要求,当然有些是通用的,在这块initial code中,我们需要注意的是在集成数据的时候,要保证参数take进入的正确性,否则会造成不亮,蓝屏,白屏等问题。
在MTK平台下,initial code是在driver中配置的,在qcom平台下是在dtsi中配置的。