高通LCD开发常见问题&分析 (2)

Initial code另外需要我们注意的是最后2个寄存器0x11和0x29。这是点亮屏幕最后的两个参数,正常情况下延迟会在150ms和50ms。其余寄存器写入值可以不需要延时。

在灭屏的时候,通常会去先写0x28再写0x10,延迟应该和亮屏的2911对应。这是通常说的2810的power off模式。

另外亮屏通常用的是lp mode,而灭屏用的是hig mode。

Porch

Proch是前后廊,用于描述切屏的数据,一般出现错误和误差的情况会有上、下部分出现亮稳横纹等情况。

这是由于LCD显示的时候丢了几行数据造成的,根本原因是在LCD显示速度慢与主控写的速度,而两者没有使用一个叫Tearing effect out line的机制。

关于porch的计算:

img

HFP:Horizontal Back Porch = left_margin

水平后沿:在每行或者每列像素数据开始输出时要插入的像素时钟周期。

HBP:Horizontal Front Porch = right_margin

水平前沿:在每行或每列的像素结束到LCD行时钟输出脉冲之间的像素时钟。

VBP: Vertical Back Porch = upper_margin

垂直后沿:在垂直同步周期之后帧开头时的无效行数。

VFP: Vertical Front Porch = lower_margin

垂直前沿:本帧数据输出结束到下一个垂直同步周期开始之前的无效行数。

Hsync:Hsync plus width = HPW

行(水平)同步脉宽(单位是时钟周期)

Vsync: Vertical plus width = VPW

同理Vsync=VPW,垂直时钟周期。

DSI Clock

H-total = HorizontalActive + HorizontalFrontPorch + HorizontalBackPorch + HorizontalSyncPulse + HorizontalSyncSkew

V-total = VerticalActive + VerticalFrontPorch + VerticalBackPorch + VerticalSyncPulse + VerticalSyncSkew

Total pixel = H-total * V-total * 60(Hz通常都是这个,当然可以变).

Bitclk = Total pixel * bpp(byte) *8/lane number(有几路mipi data lane).

Byteclk = bitclk/8

Dsipclk(Dsi pixel clock) = (Byteclk * lane number)/bpp(byte) = Total pixel * 8

Byteclk = pclk * pixel depth / lane number

ESD Check

ESD Check功能用于检测静电的干扰,在有静电干扰的情况LCD会出现白屏,横纹等临时问题,即在休眠唤醒屏幕后能回复正常。ESD check主要的作用是检测是否受到静电干扰,并且在受到干扰的时候reset LCD使之回复正常。

在配置的时候在dtsi中,其中的配置如下:

- qcom,esd-check-enabled: Boolean used to enable ESDrecovery feature. - qcom,mdss-dsi-panel-status-command: A byte stream formed by multiple dcspackets based on qcomdsi controller protocol, to read the panel status. Thisvalue is used to kick in the ESD recovery. byte0: dcs data type byte1: set to indicate this is an individual packet (no chain) byte2: virtual channel number byte3: expect ack from client (dcs read command) byte4: wait number of specified ms after dcs command transmitted byte5, 6: 16 bits length in network byte order byte7 and beyond: number byte of payload - qcom,mdss-dsi-panel-status-command-mode: Stringthat specifies the ctrl state for reading the panel status. "dsi_lp_mode"= DSI low power mode "dsi_hs_mode"= DSI high speed mode - qcom,mdss-dsi-panel-status-check-mode: Specifies the panel status check method for ESD recovery. "bta_check"= Uses BTA to check the panel status "reg_read"= Reads panel status register to check the panel status "te_signal_check"= Uses TE signal behaviour to check the panel status - qcom,mdss-dsi-panel-status-value: Specifies the value of the panel statusregister when the panel is in good state. LCD DTSI中各参数详细解释

大部分的设备树解析代码在:kernel/drivers/video/fbdev/msm/mdss_dsi_panel.c中,可以自己参考去看对应的配置意义。

属性

 

描述

  代码示例  

参数详解

 
 qcom,mdss-dsi-panel-name    用作面板描述名称的字符串。   qcom,mdss-dsi-panel-name = "tianma(otm1283a) 720p video mode dsi panel";    根据您的面板名称进行定制  
qcom,mdss-dsi-panel-controller   指定此面板映射到的DSIcontroller的句柄。   qcom,mdss-dsi-panel-controller =<&mdss_dsi0>;    保持不变  
 qcom,mdss-dsi-panel-type   指定面板操作模式。
“dsi_video_mode” = 启用视频模式
“dsi_cmd_mode” = 启用命令模式
  qcom,mdss-dsi-panel-type = "dsi_video_mode";    根据您的面板规格进行定制  
qcom,mdss-dsi-panel- destination   指定面板目标显示的字符串。
"display_1" = DISPLAY_1
"display_2" = DISPLAY_2
  qcom,mdss-dsi-panel-destination = "display_1";    保持不变  
 qcom,mdss-dsi-bpp   指定面板的每像素位数。
3  = 适用于 rgb111
8  = 适用于 rgb332
12 = 适用于 rgb444
16 = 适用于 rgb565
18 = 适用于 rgb666
24 = 适用于 rgb888
   qcom,mdss-dsi-bpp= <24>;    根据您的面板规格进行定制  
qcom,mdss-dsi-panel-framerate   指定面板的帧率。60 = 每秒 60 帧(默认值)   qcom,mdss-dsi-panel-framerate =<60>;   根据您的面板规格进行定制  
qcom,mdss-dsi-panel-width    指定面板宽度(单位:像素)。   qcom,mdss-dsi-panel-width =<720>;   根据您的面板规格进行定制  
qcom,mdss-dsi-panel-height    指定面板高度(单位:像素)。   qcom,mdss-dsi-panel-height =<1280>;   根据您的面板规格进行定制  
qcom,mdss-dsi-h-back-porch    水平后沿值(单位:像素)。   qcom,mdss-dsi-h- back-porch =<100>;   根据您的面板规格进行定制  
qcom,mdss-dsi-h-front-porch   水平前沿值(单位:像素)。   qcom,mdss-dsi-h- front-porch = <52>;   根据您的面板规格进行定制  
qcom,mdss-dsi-h-pulse-width   水平脉冲宽度。   qcom,mdss-dsi-h- pulse-width = <24>;   根据您的面板规格进行定制  
qcom,mdss-dsi-h-sync-skew   水平同步倾斜值。0 = 默认值。   qcom,mdss-dsi-h- sync-skew = <0>;   保持不变  
qcom,mdss-dsi-v-back-porch   垂直后沿值(单位:像素)。   qcom,mdss-dsi-v- back-porch = <20>;   根据您的面板规格进行定制  
qcom,mdss-dsi-v-front-porch   垂直前沿值(单位:像素)。   qcom,mdss-dsi-v- front-porch = <8>;   根据您的面板规格进行定制  
qcom,mdss-dsi-v-pulse-width   垂直脉冲宽度。   qcom,mdss-dsi-v- pulse-width = <4>;   根据您的面板规格进行定制  
qcom,mdss-dsi-h-left-border   水平左边框(单位:像素)。0 = 默认值   qcom,mdss-dsi-h-left-border = <0>;   保持不变  
qcom,mdss-dsi-h-right-border   水平右边框(单位:像素)。0 = 默认值   qcom,mdss-dsi-h- right-border = <0>;    保持不变  
qcom,mdss-dsi-v-top-border   垂直上边框(单位:像素)。0 = 默认值   qcom,mdss-dsi-v- top-border = <0>;   保持不变  
qcom,mdss-dsi-v-bottom-border   垂直下边框(单位:像素)。0 = 默认值   qcom,mdss-dsi-v- bottom-border =<0>;   保持不变  
qcom,mdss-dsi-border-color   如有边框,定义边框颜色值。0 = 默认值。   qcom,mdss-dsi-border-color = <0>;   保持不变  
qcom,mdss-dsi-panel-timings   长度为 12 的数组,用于指定面板的PHY 定时设置。   qcom,mdss-dsi-panel-timings = [92 1A 12 00 3E 42 161E 14 03 04 00];   开始尝试启动此面板时保持不变;如果面板启动失败,请创建用例,帮助微调参数  
qcom,mdss-dsi-virtual- channel-id   指定虚拟频道标识符。0 = 默认值。   qcom,mdss-dsi-virtual-channel-id =<0>;    保持不变  
qcom,mdss-dsi-stream   指定要使用的数据包流。
0 = 流 0(默认值)
1 = 流 1
  qcom,mdss-dsi-stream = <0>;    保持不变  
 qcom,mdss-dsi-on-command   长度可变的数组,用于列举面板的 init命令。
关于格式,请参考 kernel\drivers\video\msm\mdss\mdss_dsi.h 中的 dsi_cmd_desc 结构定义。
由多个基于 qcom DSI 控制器协议的dcs 数据包构成的字节流。
字节 0 – DCS 数据类型字节
1 – 设置此字节表示这是独立数据包(无链)字节
2 – 虚拟频道编号字节
3 – 需要来自客户端的确认(dcs 读取命令)字节
4 – 在传输 dcs 命令后等待指定的毫秒数字节
5、6 – 按网络字节顺序列出的16 位长度字节
7 及以上 – 净荷的字节数
   qcom,mdss-dsi-on- command =[ 32 01 00 00 00 0002 00 00 29 01 00 00 10 00 02 FF 99];    根据您的面板规格进行定制  
 qcom,mdss-dsi-off-command    长度可变的数组,用于列举面板关闭 命令。   qcom,mdss-dsi-off-command =[ 05 01 00 00 32 02 28 00 05 01 00 00 7802 10 00];    根据您的面板规格进行定制  
 qcom,mdss-dsi-on-command-state   指定用于发送 ON 命令的控制状态的字符串。
"dsi_lp_mode" = DSI 低功率模式(默认值)
"dsi_hs_mode" = DSI 高速模式
   qcom,mdss-dsi-on- command-state ="dsi_lp_mode";    根据您的面板规格进行定制  
 qcom,mdss-dsi-off-command- state   指定用于发送 OFF 命令的控制状态的字符串。
"dsi_lp_mode" = DSI 低功率模式(默认值)
"dsi_hs_mode" = DSI 高速模式
   qcom,mdss-dsi-off- command-state ="dsi_hs_mode";    根据您的面板规格进行定制  
 qcom,mdss-dsi-color-order   指定 R、G 和 B 通道排序。
"rgb_swap_rgb" =DSI_RGB_SWAP_RGB(默认值)
"rgb_swap_rbg" =DSI_RGB_SWAP_RBG
"rgb_swap_brg" = DSI_RGB_SWAP_BRG
"rgb_swap_grb" =
   qcom,mdss-dsi-color-order = "rgb_swap_rgb";    根据您的面板规格进行定制  
DSI_RGB_SWAP_GRB
"rgb_swap_gbr" =DSI_RGB_SWAP_GBR
 
 qcom,mdss-dsi-underflow-color   指定面板下溢颜色的控制器设置。0xff = 默认值。   qcom,mdss-dsi-underflow-color =<0xff>;    保持不变  
 qcom,mdss-dsi-h-sync-pulse   指定面板的脉冲模式选项。
0 = 不在 vs/ve 数据包之后发送hsa/he(默认值)
1 = 在 vs/ve 数据包之后发送 hsa/he
   qcom,mdss-dsi-h-sync-pulse = <1>;    根据您的面板规格进行定制  
qcom,mdss-dsi-hfp-power- mode   用于确定水平前沿(HFP)空白期的DSI 通道状态的布尔值    qcom,mdss-dsi-hfp-power-mode;   根据您的面板规格进行定制  
qcom,mdss-dsi-hbp-power- mode   用于确定水平后沿(HBP)空白期期间的 DSI 通道状态的布尔值。    qcom,mdss-dsi-hbp-power-mode;   根据您的面板规格进行定制  
qcom,mdss-dsi-hsa-power- mode   用于确定水平同步活跃(HSA)模式 期间的 DSI 通道状态的布尔值。   qcom,mdss-dsi-hsa-power-mode;   根据您的面板规格进行定制  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwswfx.html