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
分别讲解:
dev/gcdb/display/include/panel_jdi_gree_1080p_video.h
project/msm8996.mk
target/msm8996/oem_panel.c
target/msm8996/target_display.c
主要是配置面板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)
以上表格说明的是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)为6
垂直前沿值(qcom,mdss-dsi-v-front-porch,VFP)为8
垂直脉冲宽度(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的对应起来
在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对应起来
首先,添加头文件#include “include/xxx.h” —>上一步的头文件
在枚举类型中添加新屏:
在进入oem_panel_select函数中,事先要知道hw_id是什么,switch后进入相应的分支,进行如下赋值:
在init_panel_data函数中,利用switch (panel_id),找到相应的地方,给panelstruct结构体赋值
以下是通过读取GPIO49和别的屏做兼容。
此文件主要是进行点亮背光和设置reset引脚
根据原理图,在代码某处拉高引脚
由以上原理图得知:配置引脚开背光:
配置reset引脚:
display.h中定义了显示屏相关的引脚,和一些相关的宏以及配置信息
panel.h中定义了显示屏代码中相关的结构体
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
arch/arm/boot/dts/qcom/dsi-panel-jdi-gree-1080p-video.dtsi 主要是进行添加新屏的参数和lk中对应起来
&mdss_mdp在这个节点中进行添加配置值
以上代码中
//指定面板 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代表拉低,10、20/152代表时间
qcom,mdss-dsi-reset-sequence = <1 10>, <0 20>, <1 152>
该文件中包含有#include "dsi-panel-jdi-gree-1080p-video.dtsi"
这个文件的配置,时序需要计算,参考高通文档:80-NH713-1_H_DSI_Timing_Parameters.xlsm 第2.2.2 小结DSI PHY timing calculation:将供应商提供的IC规格书中的具体值填入下表红色圈中即可
填完以上数值后,就可以在DSI PHY 2.0.0 timing setting tab得到下表
将以上数值具体说明:
该文件主要讲明的是
1)LCD mipi dsi 的方式single 代表只有一个通道驱动,支持video模式,也支持cmd模式
2)背光参数的设置
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启动背光
设置背光参数
在kernel中的mdss_dsi.c或者mdss_dsi_panel.c中打开背光引脚和进行reset上电
drivers/video/msm/mdss/mdss_dsi.c中
drivers/misc/Kconfig
代码编译规则的配置
G03X5/kernel/msm-3.18 / drivers/misc/Kconfig
G03X5/kernel/msm-3.18 / arch/arm64/configs/msm_defconfig