LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1

LCD 分为LK 和kernel 两部分移植

首先要准备以下东西:屏IC 规格书,初始化代码,硬件原理图 
屏IC 规格书—>获得时序等数据 

初始化代码 —>获得初始化屏幕ic的命令,用于编写屏的.h文件(lk)和.dtsi文件(kernel) 
硬件原理图 —>获得打开背光、reset等有关电源的引脚,在代码中拉高拉低

涉及到的文件是:

一、Lk部分:在Z:\G0335D\bootable\bootloader\lk目录下:

dev/gcdb/display/include/panel_jdi_gree_1080p_video.h

project/msm8996.mk

target/msm8996/oem_panel.c
target/msm8996/target_display.c

二、kernel部分:在G03X5/kernel/msm-3.18目录下:

arch/arm/boot/dts/qcom/dsi-panel-jdi-gree-1080p-video.dtsi
arch/arm/boot/dts/qcom/msm8996-mdss-panels.dtsi

arch/arm/boot/dts/qcom/msm8996-regulator.dtsi

arch/arm/boot/dts/qcom/msm8996-mtp.dtsi

arch/arm64/configs/msm_defconfig

drivers/misc/Kconfig                                   

drivers/video/msm/mdss/mdss_dsi.h                               

drivers/video/msm/mdss/mdss_dsi.c                      

drivers/video/msm/mdss/mdss_dsi_panel.c          

目录

一、Lk部分:在Z:\G0335D\bootable\bootloader\lk目录下:

1、分析:dev/gcdb/display/include/panel_jdi_gree_1080p_video.h

2、分析:bootable/bootloader/lk/target/msm8996/oem_panel.c

3、分析:bootable/bootloader/lk/target/msm8996/target_display.c

二、kernel部分:在G03X5/kernel/msm-3.18目录下:

1.首先要写好.dts文件 

2、arch/arm/boot/dts/qcom/msm8996-mdss-panels.dtsi

3、arch/arm/boot/dts/qcom/msm8996-mtp.dtsi

4、arch/arm/boot/dts/qcom/msm8996-regulator.dtsi

5、drivers/video/msm/mdss/mdss_dsi.c             

6、drivers/video/msm/mdss/mdss_dsi_panel.c   

6、drivers/video/msm/mdss/mdss_dsi_panel.c   

7、arch/arm64/configs/msm_defconfig


分别讲解:

一、Lk部分:在Z:\G0335D\bootable\bootloader\lk目录下:

dev/gcdb/display/include/panel_jdi_gree_1080p_video.h

project/msm8996.mk

target/msm8996/oem_panel.c
target/msm8996/target_display.c

1、分析:dev/gcdb/display/include/panel_jdi_gree_1080p_video.h

主要是配置面板Panel resolution、Panel configuration、Panel Command information、Panel Timing。作用:点亮屏幕

从device\qcom\common\display\tools下找到panel-xxxx.xml文件里面包含主要有9个部分。

xml文件每个配置具体含义可以查看高通的文档。可以知道代码时序中每一个值的具体含义,

Panel.h中可以找到其结构体

参考供应商提供的IC规格书:A531_TD4310_Register_Setting_Seqence_for_customer_20170810.pdf

1)

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第1张图片

以上表格说明的是Panel resolution
面板宽度(qcom,mdss-dsi-panel-width,HAdr)1080 

面板高度(qcom,mdss-dsi-panel-height,VAdr)2160

水平前沿值(qcom,mdss-dsi-h-front-porch,HFP)60 

水平后沿值(qcom,mdss-dsi-h-back-porch,HBP)30 

水平脉冲宽度(qcom,mdss-dsi-h-pulse-width,Hsync)130 

HSyncSkew

垂直后沿值(qcom,mdss-dsi-v-back-porch,VBP)

垂直前沿值(qcom,mdss-dsi-v-front-porch,VFP)

垂直脉冲宽度(qcom,mdss-dsi-v-pulse-width,Vsync)60 

厂家没有特别指明的设置为0

以下为代码配置:

以上时序的每一个值表示具体是:

 

         1080

         1920

         60

         32

         16

         0

         6

         8

         2

         0

         0

         0

         0

         

         

以上数值也要和kernel中kernel/msm-3.18 / arch/arm/boot/dts/qcom/dsi-panel-jdi-gree-1080p-video.dtsi的对应起来

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第2张图片

bootable/bootloader/lk/dev/gcdb/display/include/panel.h中可以找到其结构体:

typedef struct panel_resolution{

    uint16_t panel_width;

    uint16_t panel_height;

    uint16_t hfront_porch;

    uint16_t hback_porch;

    uint16_t hpulse_width;

    uint16_t hsync_skew;

    uint16_t vfront_porch;

    uint16_t vback_porch;

    uint16_t vpulse_width;

    uint16_t hleft_border;

    uint16_t hright_border;

    uint16_t vtop_border;

    uint16_t vbottom_border;

    uint16_t hactive_res;

    uint16_t vactive_res;

    uint16_t invert_data_polarity;

    uint16_t invert_vsync_polarity;

    uint16_t invert_hsync_polarity;

};

2)

时序需要计算,参考高通文档:80-NH713-1_H_DSI_Timing_Parameters.xlsm 第2.2.2 小结DSI PHY timing calculation:

Panel timing 和kernel中G03X5/kernel/msm-3.18 / arch/arm/boot/dts/qcom/dsi-panel-jdi-gree-1080p-video.dtsi对应起来

2、分析:bootable/bootloader/lk/target/msm8996/oem_panel.c

首先,添加头文件#include “include/xxx.h” —>上一步的头文件 


接着在屏列表信息中添加新屏:

在枚举类型中添加新屏:

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第3张图片

在进入oem_panel_select函数中,事先要知道hw_id是什么,switch后进入相应的分支,进行如下赋值: 

在init_panel_data函数中,利用switch (panel_id),找到相应的地方,给panelstruct结构体赋值

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第4张图片

以下是通过读取GPIO49和别的屏做兼容。

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第5张图片

 

3、分析:bootable/bootloader/lk/target/msm8996/target_display.c

此文件主要是进行点亮背光和设置reset引脚

根据原理图,在代码某处拉高引脚 

由以上原理图得知:配置引脚开背光:

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第6张图片

 

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第7张图片LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第8张图片

配置reset引脚:

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第9张图片

display.h中定义了显示屏相关的引脚,和一些相关的宏以及配置信息 
panel.h中定义了显示屏代码中相关的结构体

二、kernel部分:在G03X5/kernel/msm-3.18目录下:

arch/arm/boot/dts/qcom/dsi-panel-jdi-gree-1080p-video.dtsi
arch/arm/boot/dts/qcom/msm8996-mdss-panels.dtsi

arch/arm/boot/dts/qcom/msm8996-regulator.dtsi

arch/arm/boot/dts/qcom/msm8996-mtp.dtsi

arch/arm64/configs/msm_defconfig

drivers/misc/Kconfig                                   

drivers/video/msm/mdss/mdss_dsi.h                               

drivers/video/msm/mdss/mdss_dsi.c                      

drivers/video/msm/mdss/mdss_dsi_panel.c          

 

1.首先要写好.dts文件 

 arch/arm/boot/dts/qcom/dsi-panel-jdi-gree-1080p-video.dtsi 主要是进行添加新屏的参数和lk中对应起来

&mdss_mdp在这个节点中进行添加配置值

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第10张图片

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第11张图片

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第12张图片

以上代码中

        //指定面板 PHY 定时设置的长度为 12 的数组,跟lk一样

qcom,mdss-dsi-panel-timings = [D6 32 22 00 60 66 26 36 28 03 04 00];

        //指定模式切换后的字节时钟周期,lk一样

qcom,mdss-dsi-t-clk-post = <0x13>;

        //指定模式切换前的字节时钟周期,lk一样

qcom,mdss-dsi-t-clk-pre = <0x2E>;

qcom,mdss-dsi-bl-min-level = <1>;

     //背光最大电流,255

qcom,mdss-dsi-bl-max-level = <4095>;

qcom,mdss-dsi-dma-trigger = "trigger_sw";

qcom,mdss-dsi-mdp-trigger = "none";

qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";

        //屏幕的上电时序,1代表拉高,0代表拉低,1020/152代表时间

qcom,mdss-dsi-reset-sequence = <1 10>, <0 20>, <1 152>

2arch/arm/boot/dts/qcom/msm8996-mdss-panels.dtsi

该文件中包含有#include "dsi-panel-jdi-gree-1080p-video.dtsi"

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第13张图片

这个文件的配置,时序需要计算,参考高通文档:80-NH713-1_H_DSI_Timing_Parameters.xlsm 第2.2.2 小结DSI PHY timing calculation:将供应商提供的IC规格书中的具体值填入下表红色圈中即可

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第14张图片

填完以上数值后,就可以在DSI PHY 2.0.0 timing setting tab得到下表

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第15张图片

将以上数值具体说明:

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第16张图片

3、arch/arm/boot/dts/qcom/msm8996-mtp.dtsi

该文件主要讲明的是

1)LCD mipi dsi 的方式single 代表只有一个通道驱动,支持video模式,也支持cmd模式

2)背光参数的设置

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第17张图片

hw-config = "single_dsi"; //mipi dsi接口为一个通道驱动

qcom,dsi-pref-prim-pan = <&dsi_ft8716_1080p_video>;  //表示跟添加的显示屏的节点名称一样

qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_wled";  // pwm启动背光

4、arch/arm/boot/dts/qcom/msm8996-regulator.dtsi

设置背光参数

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第18张图片

5、  drivers/video/msm/mdss/mdss_dsi.c             

6、drivers/video/msm/mdss/mdss_dsi_panel.c   

kernel中的mdss_dsi.c或者mdss_dsi_panel.c中打开背光引脚和进行reset上电 

         drivers/video/msm/mdss/mdss_dsi.c中

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第19张图片

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第20张图片

 

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第21张图片

        

6、drivers/video/msm/mdss/mdss_dsi_panel.c   

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第22张图片

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第23张图片

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第24张图片

LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1_第25张图片

7、arch/arm64/configs/msm_defconfig

drivers/misc/Kconfig

代码编译规则的配置

G03X5/kernel/msm-3.18 / drivers/misc/Kconfig

G03X5/kernel/msm-3.18 / arch/arm64/configs/msm_defconfig

你可能感兴趣的:(LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1)