msm8953 LCD移植详解

news/2024/5/3 20:28:09/文章来源:https://blog.csdn.net/qq_33782617/article/details/126805769

一、简介

本文是基于高通msm8953的LCD模块移植说明。LCD移植主要是涉及到LK和kernel部分的修改。

二、实操准备

1、专业术语

HSYNC:行同步信号,表示扫描1行的开始。
VSYNC:帧同步信号,表示扫描1帧的开始,一帧也就是LCD显示的一个画面。
HFP:Horizon front porch
水平前沿,在每行或每列的象素结束到LCD 行时钟输出脉冲之间的像素时钟数
HBP:Horizon back porch
水平后沿,是指在每行或每列的象素数据开始输出时要插入的像素时钟周期数
VFP:Vertical front porch
垂直前沿,本帧数据输出结束到下一帧垂直同步周期开始之前的无效行数
VBP:Vertical back porch
垂直后沿,在垂直同步周期之后帧开头时的无效行数
HDP:Horizon display period
VDP:Vertical display period
HPW:Hsync plus width
行同步脉宽。单位:像素时钟周期
VPW:Vsync plus width
垂直同步脉宽。单位:显示一行的时间

时序属性如下:
在这里插入图片描述

2、常识必备

1、像素(pixel)
整个图像是由一个个的像素组成的,像素就是一个显示点。
2、像素间距(pitch)
pitch是连续2个像素的像素中心的距离。
3、像素深度/位数(bits per pixel,简称bpp)
一个像素在计算机中由多少个位来描述。常见的像素深度:1位、8位、16位、24位、324、分辨率(resolution)
屏幕的横向和纵向的像素个数就叫分辨率。屏幕尺寸和分辨率无关的,屏幕尺寸是指屏幕的对角线尺寸。屏幕尺寸和分辨率、像素间距三者之间有关联。

3、文件部分
1)屏厂商提供的屏初始化命令数据、面板参数等
2)高通80-NH713-1_Y_DSI_Timing_Parameters_User_Interactive_Spreadsheet.xls

4、DSI数据帧格式说明
在这里插入图片描述
qcom,mdss-dsi-on-command含义说明:

byte 0: dcs data type 数据类型如上
byte 1: set to indicate this is an individual packetvalue: 01 (indicates this is an individual packet)00 (indicates this will be appended to the next individual packet in the packet stream)
byte 2: virtual channel number
byte 3: expect ack from client (dcs read command)
byte 4: wait number of specified ms after dcs commandtransmitted
byte 5, 6: 16 bits length in network byte order
byte 7 and beyond: number byte of payload

常用的数据格式:
1)0x05 DCS WRITE,no parameters
05 01 00 00 32 00 02 28 00
05:数据类型
01 00 00:分别表示单帧、虚拟信道号、请求应答标志位
0x32:该帧发完延时时间毫秒,即为50ms
00 02:长度
28 00:payload,即数据(寄存器地址+数据)
2)0x15 DCS WRITE,1 parameter
15 01 00 00 c8 00 02 11 00
3)0x29 Generic Long Write
29 01 00 00 00 00 02 53 24
4)0x39 DCS Long Write Command Packet
39 01 00 00 0A 00 02 29 00
5)0x13 Generic Short WRITE,1 parameter
13 01 00 00 00 00 02 BC 46

三、实际操作说明

1、.H和dtsi文件生成
可通过device/qcom/common/display/tools/parser.pl脚本生成.h和dts文件。
命令为:perl parser.pl panel_xxx_xxx_xxx.xml panel
注:
1)xml文件可拷贝现成的,在生成目标文件后,根据实际屏信息进行配置修改。
2)生成文件为*.h和*.dtsi。其中.h放置lk/dev/gcdb/display/include/panel_lt8911b_1080p_video.h,dtsi文件放置到kernel/msm-4.9/arch/arm64/boot/dts/qcom/dsi-panel-lt8911b-1080p-video.dtsi。

2、LK修改
1)target/msm8953/oem_panel.c文件
1.1)引入面板数据的头文件

#include "include/panel_lt8911b_1080p_video.h"

1.2)枚举变量中声明面板id

enum {LT8911B_1080P_VIDEO_PANEL,
};

1.3)目标面板支持列表中增加面板名字和id

static struct panel_list supp_panels[] = {{"dsi_lt8911b_1080p_video", LT8911B_1080P_VIDEO_PANEL},
};

1.4)根据面板id和数据初始化面板

static int init_panel_data(struct panel_struct *panelstruct,struct msm_panel_info *pinfo,struct mdss_dsi_phy_ctrl *phy_db)...switch (panel_id) {case LT8911B_1080P_VIDEO_PANEL:panelstruct->paneldata    = &lt8911b_1080p_video_panel_data;panelstruct->panelres     = &lt8911b_1080p_video_panel_res;panelstruct->color        = &lt8911b_1080p_video_color;panelstruct->videopanel   = &lt8911b_1080p_video_video_panel;panelstruct->commandpanel = &lt8911b_1080p_video_command_panel;panelstruct->state        = &lt8911b_1080p_video_state;panelstruct->laneconfig   = &lt8911b_1080p_video_lane_config;panelstruct->paneltiminginfo= &lt8911b_1080p_video_timing_info;panelstruct->panelresetseq= &lt8911b_1080p_video_reset_seq;panelstruct->backlightinfo = &lt8911b_1080p_video_backlight;pinfo->mipi.panel_on_cmds = lt8911b_1080p_video_on_command;pinfo->mipi.num_of_panel_on_cmds= LT8911B_1080P_VIDEO_ON_COMMAND;pinfo->mipi.panel_off_cmds = NULL;pinfo->mipi.num_of_panel_off_cmds = 0;memcpy(phy_db->timing,lt8911b_1080p_video_timings,MAX_TIMING_CONFIG * sizeof(uint32_t));pinfo->mipi.signature = LT8911B_1080P_VIDEO_SIGNATURE;		panelstruct->paneldata->panel_operating_mode &= ~USE_DSI1_PLL_FLAG;break;}...

1.5)获取panel_id,以便进行不同屏的初始化

int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,struct msm_panel_info *pinfo,struct mdss_dsi_phy_ctrl *phy_db)
{...
}

注:panel_id的获取逻辑可根据实际情况定义。

2).h文件相关配置说明
1.1)时序说明

static const uint32_t lt8911b_1080p_video_timings[] = {0x1b, 0x09, 0x08, 0x00, 0x24, 0x1f, 0x08, 0x09, 0x05, 0x03, 0x04, 0x00

通过excel表格生成的时序是11字节,而此处的数组是12字节,所要补一个字节0x00。
1.2)panel_config说明

static struct panel_config lt8911b_1080p_video_panel_data = {"qcom,mdss_dsi_lt8911b_1080p_video", "dsi:0:", "qcom,mdss-dsi-panel",10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 1, 10000, 0, 0, 0, 0, 0, 0, NULL
};

通过xml文件生成时会少2个字节,所以要补两个字节的0或NULL。
1.3)on/off命令说明
若不够为了对齐可补0或0xff。
注:
屏厂商提供的命令信息的一般格式为[长度 寄存器地址 数据]
长度包括寄存器地址 + 数据长度,形如:

...
DSI_CMD(0x03,0xB2);Set RSO
DSI_PA(0x40);   //1 1280Gate	
DSI_PA(0x08);   //2 800RGB	
...
DSI_CMD(0x01,0x11); Sleep Out
DelayX1ms(250);
...

另外时间一般是通过dsi的格式上配置。

2、kernel修改
1)kernel\msm-4.9\arch\arm64\boot\dts\qcom\msm8953-mdss-panels.dtsi文件
1.1)导入屏的dtsi文件

#include "dsi-panel-lt8911b-1080p-video.dtsi"

1.2)若需要旋转180°则添加如下语句

&dsi_lt8911b_1080p_dsi_video {qcom,mdss-dsi-panel-orientation = "180";
};

3、屏参数说明
此处基于dtsi文件的配置进行说明
1)基本配置信息说明

//分辨率
qcom,mdss-dsi-panel-width = <1920>;
qcom,mdss-dsi-panel-height = <1080>;qcom,mdss-dsi-h-front-porch = <88>;//水平前沿
qcom,mdss-dsi-h-back-porch = <148>;//水平后沿
qcom,mdss-dsi-h-pulse-width = <44>;//水平脉冲宽度
qcom,mdss-dsi-h-sync-skew = <0>;qcom,mdss-dsi-v-back-porch = <36>;//垂直后沿
qcom,mdss-dsi-v-front-porch = <4>;//垂直后沿
qcom,mdss-dsi-v-pulse-width = <5>;//垂直脉冲宽度//左边框、右边框、上边框、下边框
qcom,mdss-dsi-h-left-border = <0>;
qcom,mdss-dsi-h-right-border = <0>;
qcom,mdss-dsi-v-top-border = <0>;
qcom,mdss-dsi-v-bottom-border = <0>;
qcom,mdss-dsi-bpp = <24>;//像素深度
//上电命令、下电命令(一般由屏厂商提供),并且遵循dsi帧数据协议格式。
qcom,mdss-dsi-on-command = [29 01 00 00 02 00 06 A0 06 87 30 10 1029 01 00 00 02 00 06 A0 07 02 30 10 10...29 01 00 00 00 00 06 00 06 41 00 00 0029 01 00 00 00 00 06 00 06 43 00 00 0029 01 00 00 00 00 06 10 05 01 00 00 00
];
qcom,mdss-dsi-off-command = [29 01 00 00 14 00 06 00 06 01 00 00 0029 01 00 00 14 00 06 00 06 00 00 00 00
];
//传输模式
qcom,mdss-dsi-on-command-state = "dsi_lp_mode";
qcom,mdss-dsi-off-command-state = "dsi_hs_mode";
//时序,同.h需要补一位0x00。后文详解		
qcom,mdss-dsi-panel-timings = [E6 38 26 00 68 6C 2A 3A 2C 03 04 00];
qcom,mdss-dsi-t-clk-post = <0x02>;//模式切换后的字节时钟周期
qcom,mdss-dsi-t-clk-pre = <0x2B>;//模式切换前的字节时钟周期
//背光的等级划分
qcom,mdss-dsi-bl-min-level = <1>;
qcom,mdss-dsi-bl-max-level = <4095>;
//复位引脚的时序,格式为<电平 时间(毫秒级)>
qcom,mdss-dsi-reset-sequence = <1 20>, <0 20>, <1 20>;
//时序2,后文讲解
qcom,mdss-dsi-panel-timings-phy-v2 = [24 1f 08 09 05 03 04 a0	/*Data 0*/24 1f 08 09 05 03 04 a0	/*Data 1*/24 1f 08 09 05 03 04 a0 /*Data 2*/24 1f 08 09 05 03 04 a0 /*Data 3*/24 1b 08 09 05 03 04 a0 /*CLK lane*/
];
//背光、复位、pwm引脚。主要是根据硬件配置。
qcom,platform-bklight-en-gpio = <&tlmm 137 0>;	
qcom,platform-reset-gpio = <&tlmm 61 0>;
qcom,mdss-dsi-pwm-gpio = <&pm8953_mpps 4 0>;
//背光控制方式
qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm"; 
//pwm频率
qcom,mdss-dsi-bl-pmic-pwm-frequency = <1000>;		

2)Timing时序计算及说明
主要是介绍80-NH713-1_Y_DSI_Timing_Parameters_User_Interactive_Spreadsheet.xlsm文档的使用。
该文档需要使用微软的EXCEL打开,如果使用WPS需自行下载组件才可,并且需要打开VBA宏。
在DSI and MDP registers表中,需根据实际屏信息填写。如下:
在这里插入图片描述
切换到DSI PHY timing setting表中,分别按下CTRL+J、CTRL+L,如下:
在这里插入图片描述
出现VALID 即说明参数校验成功。DSI PHY timing setting表中数据对应qcom,mdss-dsi-panel-timings的数据。即转化为:
qcom,mdss-dsi-panel-timings = [
49 0C 06 00 28 2C 0A 10 09 03 04 00]; //补一个字节0x00
qcom,mdss-dsi-t-clk-post = <0x05>;
qcom,mdss-dsi-t-clk-pre = <0x12>

DSI PHY 2.0.0 timing setting中的数据如下:
在这里插入图片描述
DSI PHY 2.0.0 timing setting表中的数据对应qcom,mdss-dsi-panel-timings-phy-v2。即转化为:
qcom,mdss-dsi-panel-timings-phy-v2 = [
1C 19 02 03 01 03 04 a0 /Data 0/
1C 19 02 03 01 03 04 a0 /Data 1/
1C 19 02 03 01 03 04 a0 /Data 2/
1C 19 02 03 01 03 04 a0 /Data 3/
1C 07 02 03 01 03 04 a0 /CLK lane/
];
注:最后要补一个字节0xa0。
具体数据说明:
在这里插入图片描述

四、总结

msm8953 LCD移植主要的修改是LK和Kernel,一般是根据现成的.H和.DTSI 文件重新拷贝一份,然后根据屏的参数信息进行修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_6840.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习笔记——网络管理

主要涉及Linux网络管理的几个简单指令&#xff0c;主要包括ifconfig、ping、nslookup 获取网络接口的配置信息 可以使用 ifconfig 命令查看网络接口的配置信息 语法 ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络…

认识我们的团队:Ed Hertzog

认识我们的团队:Ed HertzogOur team works hard, but they believe in the work they do— hear more from one of our devs below. 了解背后的人 茴香梗 ——在本系列中,我们与 Fennel Labs 团队的成员坐下来了解更多关于他们是谁以及他们做什么的信息。今天,我们一起出去玩…

网络编程-流

流一、概貌1.消息类型二、getmsg和putmsg函数三、getpmsg和putpmsg函数四、ioctl函数五、TPI&#xff1a;传输提供者接口1.TPI时间获取客户程序一、概貌 流在进程和驱动程序(driver)之间提供全双工的连接,如下所示&#xff0c;虽然我们称底部那个方框为驱动程序&#xff0c;它…

02 最优化模型建立方法

1 什么是数学模型 数学模型是关于部分现实世界和为一种特殊目的而作地一个抽象地.简化地结构。 具体就是为了某种目的&#xff0c;用字母.数字及其他数学符号建立起来地等式或不等式以及图表。图像。框图等描述客观事物的特征及内在联系的数学结构表达式。 2.建立数学模型的方…

【Linux---02】CentOS操作系统的说明「简单使用 | 文件目录 | 常用命令」

文章目录1. CentOS的简单使用2. CentOS的文件目录2.1 目录结构2.2 各个目录的含义3. CentOS的常用命令1. CentOS的简单使用 鼠标进入虚拟机的OS&#xff1a;直接点击鼠标左键 鼠标退出虚拟机的OS&#xff1a;ctrl alt 在linux系统上&#xff0c;不使用图形化终端&#xff0c…

蓝牙BLE调试关于NRF connect相关信息分析

简介 nRF Connect是一个强大的通用工具&#xff0c;它允许你扫描和探索你的蓝牙低功耗(以后的蓝牙LE&#xff0c;也称为蓝牙4.0版本的蓝牙规范)设备&#xff0c;并与它们通信。 nRF连接还允许您的iOS设备广告作为一个外围设备&#xff0c;充分支持许多蓝牙SIG采用的配置文件。…

微信小程序在线考试项目开发-用户信息注册登录功能

⭐️⭐️⭐️ 作者&#xff1a;船长在船上 &#x1f6a9;&#x1f6a9;&#x1f6a9; 主页&#xff1a;来访地址船长在船上的博客 &#x1f528;&#x1f528;&#x1f528; 简介&#xff1a;CSDN前端领域优质创作者&#xff0c;资深前端开发工程师&#xff0c;专注前端开发…

ERAT读和写指令(eratre和eratwe)

ERAT管理指令 为了使hypervisor&#xff08;或 “bare-metal” operating system&#xff09;软件可以直接操作ERAT的entries&#xff0c;在A2 core中实现一组nonarchitected的ERAT管理指令。为了防止user和guest模式下的程序影响TLB地址转换和访问控制机制&#xff0c;所有的E…

乐高广告创意50例——创意无砖

乐高的创意不仅仅局限于建造令人惊叹的建筑,或是拍摄定格电影,甚至是重新制作音乐专辑封面和电影海报,它甚至延伸到了广告领域。 与塑料砖一样,乐高可以采用最简单的概念,做出强大、智能且通常诙谐的声明。 从本图库中的精彩平面广告中,你可以看到,典型的乐高广告所采用…

《Python3 网络爬虫开发实战》:灵巧好用的 正则表达式

灵巧好用的 正则表达式 在上一节中&#xff0c;我们已经可以用 requests 来获取网页的源代码&#xff0c;得到 HTML 代码。但我们真正想要的数据是包含在 HTML 代码之中的&#xff0c;怎么才能从 HTML 代码中获取我们想要的信息呢&#xff1f;正则表达式就是其中一个有效的方法…

基于VC++的WEB浏览器的实现

目 录 摘 要 2 1设计题目与要求 2 2系统设计 2 2.1总体设计 2 2.2详细设计 2 2.2.1用户界面设计 3 2.2.2多标签模块设计 6 2.2.3浏览模块设计 6 2.2.4操作按钮模块设计 9 2.2.5页面缩放模块设计 10 2.2.6状态栏模块设计 11 2.2.7收藏夹模块设计 13 2.2.8窗体关闭模块设计 13 2.…

网页设计中蒸汽朋克的美丽例子

即使你不熟悉蒸汽朋克这个词,你无疑已经通过流行文化被介绍到了这种设计现象。蒸汽朋克指的是一种异想天开的风格,这种风格基于对19世纪可能的反乌托邦世界的想象。这听起来可能有点复杂,但这个折衷的类别将H.G.威尔斯的想法与维多利亚时代的设计、工业主义主题、后世界末日…

第3章 基础项目的搭建

3.1 后端项目搭建 3.1.1 gitee下载脚手架 下载地址&#xff1a;https://gitee.com/77jubao2015/springbootdemo 打开浏览器输入以上地址&#xff0c;点击下载即可&#xff0c;如图所示&#xff1a; 3.1.2 把脚手架导入到idea开发工具 步骤01 把下载后的脚手架放到指定位置并解…

数据库基本概念

目录 一、数据库概念 1、数据库的组成 &#xff08;数据为行&#xff0c;字段为列&#xff09; 2、数据库的管理系统&#xff08;DBMS) 二、数据库系统发展史 1、第一代数据库&#xff08;人工管理&#xff09; 2、第二代数据库&#xff08;文件管理&#xff09; 3、第三…

大学SQLServer2012 安装流程+启动+登录+用户的操作

这里写目录标题第一步下载解压的文件第二步骤安装软件第三步执行安装选项执行安装选项1执行安装选项2执行安装选项3 同意条款执行安装选项4配置检测执行安装选项5 下载需求组件执行安装选项6 上面安装完成后执行安装选项需求---关闭防火墙执行安装选项7--重新检测执行安装选项8…

SpringMVC基础:AJAX发送请求

AJAX请求 前面我们讲解了如何向浏览器发送一个JSON格式的数据&#xff0c;那么我们现在来看看如何向服务器请求数据。 Ajax即Asynchronous Javascript And XML&#xff08;异步JavaScript和XML&#xff09;&#xff0c;它的目标就是实现页面中的数据动态更新&#xff0c;而不是…

微服务--数据一致性

本篇文章讲解微服务数据一致性相关的知识 一、案例 在使用微服务时&#xff0c;存在跨多个服务更新数据库数据的情况。那么这就会出现一个问题&#xff0c;比如我们有三个服务&#xff08;如下图&#xff09;&#xff0c;正常情况下&#xff0c;当一个请求进来时&#xff0c;…

【软件与系统安全笔记】五、内存破坏防御

【软件与系统安全】五、内存破坏防御 这是《【软件与系统安全】笔记与期末复习》系列中的一篇 虽然对缓冲区溢出的认知已超过 40 年之久, 但缓冲区溢出仍未被消除。部分原因在于存在大量的利用选项&#xff1a; 多样的目标: 不仅仅可以利用返回地址, 实际上可以利用任意代码地…

JDK1.8中的Stream流源码中的常用方法全面解析附代码演示及源码展示

文章目录&#x1f4a8;更多相关知识&#x1f447;&#x1f342;allMatch&#x1f31f;代码演示&#x1f342;anyMatch&#x1f31f;代码演示&#x1f342;noneMatch&#x1f31f;代码演示&#x1f342;findFirst&#x1f31f;代码演示&#x1f342;findAny&#x1f31f;代码演示…

【愚公系列】2022年09月 微信小程序-WebGL纹理材质的使用

文章目录前言一、webgl的使用1.立体图形的绘制二、相关包源码三、总结前言 WebGL&#xff08;全写Web Graphics Library&#xff09;是一种3D绘图协议&#xff0c;这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起&#xff0c;通过增加OpenGL ES 2.0的一个JavaScrip…