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)

以上表格说明的是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

以下为代码配置:

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

 <!-- Panel Resolution --><PanelWidth>1080</PanelWidth><PanelHeight>1920</PanelHeight><HFrontPorch>60</HFrontPorch><HBackPorch>32</HBackPorch><HPulseWidth>16</HPulseWidth><HSyncSkew>0</HSyncSkew><VBackPorch>6</VBackPorch><VFrontPorch>8</VFrontPorch><VPulseWidth>2</VPulseWidth><HLeftBorder>0</HLeftBorder><HRightBorder>0</HRightBorder><VTopBorder>0</VTopBorder><VBottomBorder>0</VBottomBorder><!-- Optional Panel resolution configuration --><!--HActiveRes>0</HActiveRes><VActiveRes>0</VActiveRes><InvertDataPolarity>0</InvertDataPolarity><InvertVsyncPolarity>0</InvertVsyncPolarity><InvertHsyncPolarity>0</InvertHsyncPolarity -->

以上数值也要和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对应起来

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

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


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

在枚举类型中添加新屏:

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

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

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

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

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

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

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

配置reset引脚:

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在这个节点中进行添加配置值

以上代码中

//指定面板 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>

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

该文件中包含有#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得到下表

将以上数值具体说明:

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

该文件主要讲明的是

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启动背光

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

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

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

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

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相关推荐

  1. TP驱动调试分享——基于Qualcomm SDM710平台Android9.0,TP 采用I2C方式和CPU进行通信

    目录 1 厂商驱动代码的添加 1.1 synaptics_dsx代码放到SDM710 kernel input相应目录 1.2 修改input/touchscreen目录下的Makefile和Kcon ...

  2. LCD驱动调试以及Framebuffer

    内容提要: 1. android display相关的名词 2. 调试LCD驱动需要注意的步骤 3. 关于帧缓冲区及I/O内存 ------------------------------------ ...

  3. LCD驱动调试中部分常见问题的分析及解决办法

    点击打开链接http://www.52rd.com/Blog/Detail_RD.Blog_DamonKabo_30355.html 点击打开链接 http://blog.csdn.net/color ...

  4. rgb 接口lcd 驱动调试

    文章目录 lcd 控制器的模式配置 rgb 接口 时序 dma 配置 lcd 调试要点 lcd 控制器的模式配置 接口配置 soc lcd controller 一般都支持多种的 Lcd 接口, 如 ...

  5. 4G模块-EM05驱动调试分享-02(Android上层更改)

    板子:rk3568 平台:android11 1.前言 首先你要有移远官方提供的库文件,Quectel_Android_RIL_Driver_V3.3.91_master_beta,里面包含了如下文件 ...

  6. x210ii DM9000驱动调试成功-基于x210ii/s5pv210开发板

    //-------------------------------------------------------------------------------------------------- ...

  7. linux lcd驱动调试 echo dev/fb0,LCD驱动程序 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...

    LCD驱动程序 假设 app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 kernel: fb_open int fbidx = iminor ...

  8. 分享基于JavaEE移动平台的企业级房地产ERP采购系统全程开发实录

    201课全,下载地址:[url]http://pan.baidu.com/s/1pLxVAHX[/url] 初次发文,希望大家支持,以后会继续收集资源. 本课程基于众多技术如:Spring IOC,S ...

  9. 方案分享|基于i.MX6UL平台实现无线地磁车辆检测网关

    一. 无线 地磁检测技术原理 在没有外物扰动的情况下,地球磁场处于一个相对稳定的状态,当有物体经过或停靠在上方时,磁场值就会发生一些细微的变化,金属物体对磁场的扰动相对较明显,无线地磁是通过对地球磁场 ...

最新文章

  1. java 文件夹删除_java创建删除文件及文件夹大全
  2. Linux环境Shell脚本上传下载阿里云OSS文件
  3. win7 64 iis7+access ADODB.Connection 错误 '800a0e7a'
  4. mysql执行文件脚本文件_MySQL执行外部sql脚本文件的命令
  5. 【重识 HTML + CSS】背景相关知识点
  6. pycharm关联python ide_Python+Selenium进阶版 (一)- Python IDE工具-PyCharm的安装和使用...
  7. Bert核心代码解读
  8. jquery伪分页控件
  9. 三 APPIUM Android自动化 测试初体验(转)
  10. 安全服务,从“被动应对”到“主动防范”
  11. 实用的汉字拼音转换工具
  12. 判断访问浏览器的类型
  13. iOS经典讲解之Socket使用教程
  14. 【每日一题】一起冲击蓝桥杯吧——Day07【蓝桥真题一起练】
  15. 深入理解Java虚拟机读书笔记之垃圾收集器与内存分配策略
  16. 使用keep-live组件无法销毁cesium的view
  17. 外业调查工具助手,照片采集、精准定位、导航、地图查看
  18. 一个例子搞清楚(先验分布/后验分布/似然估计)
  19. DC学习(时序分析和命令)
  20. linux nss升级,Linux系统升级

热门文章

  1. macbook air 卸载java,macbook air如何删除程序
  2. 27_ArrayList类
  3. python 月初 月末
  4. 从百亿美元到零估值,硅谷的Theranos或许不止一个
  5. linux 修改 bcast,Linux Ubuntu下IP的查看和修改
  6. 拼多多涉嫌远程删除用户照片:如何防止应用软件过度收集用户数据
  7. 刷机:酷比魔方iwork8 刷回双系统
  8. Android 修改手机状态栏文字颜色
  9. java实现倒酒的问题_倒酒问题
  10. 图灵学院专用-- 00JVM参数手册