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)
以上表格说明的是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相关推荐
- TP驱动调试分享——基于Qualcomm SDM710平台Android9.0,TP 采用I2C方式和CPU进行通信
目录 1 厂商驱动代码的添加 1.1 synaptics_dsx代码放到SDM710 kernel input相应目录 1.2 修改input/touchscreen目录下的Makefile和Kcon ...
- LCD驱动调试以及Framebuffer
内容提要: 1. android display相关的名词 2. 调试LCD驱动需要注意的步骤 3. 关于帧缓冲区及I/O内存 ------------------------------------ ...
- LCD驱动调试中部分常见问题的分析及解决办法
点击打开链接http://www.52rd.com/Blog/Detail_RD.Blog_DamonKabo_30355.html 点击打开链接 http://blog.csdn.net/color ...
- rgb 接口lcd 驱动调试
文章目录 lcd 控制器的模式配置 rgb 接口 时序 dma 配置 lcd 调试要点 lcd 控制器的模式配置 接口配置 soc lcd controller 一般都支持多种的 Lcd 接口, 如 ...
- 4G模块-EM05驱动调试分享-02(Android上层更改)
板子:rk3568 平台:android11 1.前言 首先你要有移远官方提供的库文件,Quectel_Android_RIL_Driver_V3.3.91_master_beta,里面包含了如下文件 ...
- x210ii DM9000驱动调试成功-基于x210ii/s5pv210开发板
//-------------------------------------------------------------------------------------------------- ...
- linux lcd驱动调试 echo dev/fb0,LCD驱动程序 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...
LCD驱动程序 假设 app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 kernel: fb_open int fbidx = iminor ...
- 分享基于JavaEE移动平台的企业级房地产ERP采购系统全程开发实录
201课全,下载地址:[url]http://pan.baidu.com/s/1pLxVAHX[/url] 初次发文,希望大家支持,以后会继续收集资源. 本课程基于众多技术如:Spring IOC,S ...
- 方案分享|基于i.MX6UL平台实现无线地磁车辆检测网关
一. 无线 地磁检测技术原理 在没有外物扰动的情况下,地球磁场处于一个相对稳定的状态,当有物体经过或停靠在上方时,磁场值就会发生一些细微的变化,金属物体对磁场的扰动相对较明显,无线地磁是通过对地球磁场 ...
最新文章
- java 文件夹删除_java创建删除文件及文件夹大全
- Linux环境Shell脚本上传下载阿里云OSS文件
- win7 64 iis7+access ADODB.Connection 错误 '800a0e7a'
- mysql执行文件脚本文件_MySQL执行外部sql脚本文件的命令
- 【重识 HTML + CSS】背景相关知识点
- pycharm关联python ide_Python+Selenium进阶版 (一)- Python IDE工具-PyCharm的安装和使用...
- Bert核心代码解读
- jquery伪分页控件
- 三 APPIUM Android自动化 测试初体验(转)
- 安全服务,从“被动应对”到“主动防范”
- 实用的汉字拼音转换工具
- 判断访问浏览器的类型
- iOS经典讲解之Socket使用教程
- 【每日一题】一起冲击蓝桥杯吧——Day07【蓝桥真题一起练】
- 深入理解Java虚拟机读书笔记之垃圾收集器与内存分配策略
- 使用keep-live组件无法销毁cesium的view
- 外业调查工具助手,照片采集、精准定位、导航、地图查看
- 一个例子搞清楚(先验分布/后验分布/似然估计)
- DC学习(时序分析和命令)
- linux nss升级,Linux系统升级