msm8953 LCD移植详解

article/2025/9/22 12:34:27

一、简介

本文是基于高通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://chatgpt.dhexx.cn/article/txJ7IBe4.shtml

相关文章

Qcom平台添加 Camera 驱动(msm8953)

前言 硬件平台&#xff1a;MSM8953/SDM450 软件平台&#xff1a;Android9.0 主摄IC&#xff1a; IMX258 (AF、Flash) 前摄IC&#xff1a; GC5025(AF) 景深&#xff1a; OV5670/GC5025(AF) Qocm平台Android5.1 和Android8.0 (N1 msm8909)流程基本一致&#xff0c;And…

高通平台msm8953 display子系统学习

硬件上&#xff0c;高通平台有一个mipi-dsi接口连接LCM&#xff0c;由MDP&#xff08;mobile display processor&#xff09;进行管理&#xff0c;就是一般说的LCD控制器 软件上&#xff0c;高通平台提供MDSS&#xff08;Multimedia Display Sub-system&#xff09;进行管理 …

[高通MSM8953_64][Android10]解决制作差分包不生成system_manifest.xml的问题

文章目录 开发平台基本信息问题描述解决方法 开发平台基本信息 芯片: MSM8953_64 版本: Android 10 kernel: msm-4.9 问题描述 设备在调试OTA升级功能的时候&#xff0c;制作OTA全量包测试升级功能&#xff0c;升级正常&#xff1b;然后&#xff0c;测试差分包升级失败了&am…

4G全网通模块 安卓 高通骁龙MSM8909核心板 开发板

核心板特性 A53架构 8核(8*2.2GHz(A53)) 产品尺寸小,便于客户集成,减少产品体积;支持4G LTE超高速上网,单板兼容移动/联通/电信2G/3G/4G;支持4+128存储器,SD3.0支持128G;尺寸小、集成度高、大板布板灵活;支持全网通=、wifi双频;支持快充,QC3.04线MIPI 分辨率1920*1280…

【EMMC】MSM8953里时钟是如何分频的

时钟源 MSM8953振荡频率为19.2 MHz的单晶振荡器&#xff08;XO&#xff09;。XO作为所有pll的源&#xff0c;也可以作为其他时钟的源。MSM8953没有单独的休眠晶体&#xff0c;使用586的除数从XO生成睡眠时钟32.768khz作为时钟信号源。 分析代码 在host中probe函数里有在初始…

高通625系列-MSM8953 (Cortex-A53架构)

核心板特性 A53架构 8核&#xff08;8*2.2GHz(A53)&#xff09; 产品尺寸小&#xff0c;便于客户集成&#xff0c;减少产品体积&#xff1b;支持4G LTE超高速上网&#xff0c;单板兼容移动/联通/电信2G/3G/4G&#xff1b;支持4128存储器,SD3.0支持128G&#xff1b;尺寸小、集成…

如何收集 小番茄的种子

1.把西红柿切成两半&#xff0c;注意要从果柄处对切。 2.打开西红柿&#xff0c;你应该可以看到西红柿基本上分成四个均匀的部分&#xff0c;每个部分之间有种子和凝胶。 3.找一个小勺子挖出种子&#xff0c;你也可以直接用挤出的方法把种子挤出来&#xff0c;放在小碗里&#…

IOS破解软件,比较全的网站。

转载于:https://blog.51cto.com/14259888/2369621

2023最新仿第八区APP分发平台源码

**> 支持APK,IPA分发 &#xff0c;在线本机ios签名&#xff0c;安卓ios应用封装****> 需要看演示站可以联系https://jq.qq.com/?_wv1027&kjZBe9aHx**

iApp对接hybbs社区APP源码

介绍&#xff1a; 首先得搭建一个HYBBS论坛程序 服务器或者主机不能带有任何cc&#xff0c;防火墙策略&#xff01; 否则软件提交参数会被拦截&#xff0c;则null mian.iyu载入事件填自己的hybbs论坛网址 http打头 /结尾 论坛模板使用官方默认&#xff0c;移动端设置电脑端模板…

苹果应用商店app_切勿更新!IOS最新观影APP上架苹果商店

苹果软件管家 每个果粉都应该关注的一个公众号 原本前天想给大家推送一款影视APP 结果管家刚写完APP就被下架了 相信今天应该不会出现这个问题了 相信果粉们都知道大象影视这款APP 很早之前就下载体验过 但是效果真的一般&#xff0c;广告很多 本次大象影视换壳上架苹果应用商店…

梦幻星球社区APP源码 HYBBS的iApp社区源码

介绍&#xff1a; 极其好用的对接HYBBS的iApp社区源码 BUG修复&#xff1a; 修复评论无法显示 修复无法发送评论 修复头像显示 修复板块图片 … 更新&#xff1a; 新增功能页面 优化回复评论 优化帖子、帖子列表 优化我的、个人主页页面 优化注册、登录页面 增加背景设置 网盘…

iOS应用跳转(包括iPhone原有应用跳转和第三方应用跳转)

文章目录 iOS应用间跳转简介应用间跳转应用场景应用间跳转实现步骤跳转到本地或第三方应用的一些URL Schemes iOS应用间跳转简介 在开发的过程中&#xff0c;我们经常会遇到需要从一个应用程序跳转到另一个应用程序的场景。这就需要我们掌握iOS应用程序之间的相互跳转知识。 …

iOS开发~社区分享

1、概要 随着iOS平台逐渐成熟&#xff0c;连最初让人恼火的社区分享功能现在都变的几行代码就可以搞定&#xff0c;下面分享下“分享”功能原生实现。 2、实现 iOS6之前使用TWTweetComposeViewController实现分享功能&#xff0c;但iOS6之后改用SLComposeViewController实现&…

番茄助手 VS2015

转载地址&#xff1a; https://www.cnblogs.com/DswCnblog/p/5625893.html 首先在官网下载原版&#xff1a; VA_X_Setup2270_0.exe VA_X官方下载链接&#xff1a;http://www.wholetomato.com/downloads/default.asp 安装官版。 下载补丁 。 下载链接: http://pan.baidu.c…

linux安装番茄时钟,Tomato Pie番茄钟

Tomato Pie插件简介 Tomato Pie 是一款开源的Chrome 新标签页扩展&#xff0c;适用于番茄工作法&#xff0c;直观&#xff0c;简单&#xff0c;拥有马赛克统计图、浏览器通知、扩展栏图标倒计时等功能。我们之前介绍过一款just Focus - 番茄钟免费应用软件(Mac、iOS)。 番茄钟是…

番茄学习--番茄工具推荐

首先,这个工具是青峰推荐的,自己觉得用的很顺手,就推荐给大家。 这是一个在线的番茄学习工具--番茄土豆。他的网址是:https://pomotodo.com/ 下面我来说说这个工具的特点吧: 首先,在开始番茄之前,你什么都不用想,只需要点击“开始一个番茄”按钮即可。这样你就开始了一…

番茄助手 VS2015

转载地址&#xff1a; https://www.cnblogs.com/DswCnblog/p/5625893.html 1. 首先在官网下载原版&#xff1a; VA_X_Setup2270_0.exe VA_X官方下载链接&#xff1a;http://www.wholetomato.com/downloads/default.asp 2. 安装官版。 3. 下载补丁 。 下载链接: http:/…

短视频平台-小说推文(番茄小说)推广任务详情

字节旗下平台:番茄小说 今日头条&#xff0c;抖音故事&#xff0c;抖音漫画官方每周只出一次数据!!!!! 预计每周二出上周四之前的数据&#xff0c;有时官方回传数据较晚&#xff0c;会延迟到周三出! 请达人知悉! 注意: 再次强调!番茄拉新规则! 是以设备第一次下载番茄小说后搜…

找不到或无法加载主类

springboot项目时不时的就会出现这个错误&#xff0c; 错误: 找不到或无法加载主类 com.ruoyi.RuoYiApplication 解决方案&#xff1a; 自己在maven clean之后&#xff0c;会把target里边的清理表&#xff0c;项目就需要重新进行编译&#xff0c;这时候如果运行的话就会出现以上…