高通Android msm8953 驱动开发(一)--LCD调试

这篇具有很好参考价值的文章主要介绍了高通Android msm8953 驱动开发(一)--LCD调试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇记录Andoird9 高通msm8953 ili9881c LCD调试过程,主要涉及到以下几个知识点:

  (一).利用GCDB生成lk 头文件和 kernel dts,点亮屏幕;

  (二).LCD兼容;

(三).LCD方向调整;

一.GCDB生成lk 头文件和 kernel dts

GCDB可以解析xml,我们需要将屏参配置到xml,可快速生成dts 和头文件,提升工作效率.

这个xml目录在device/qcom/common/display/tools,我们复制其中一个以此作为模板修改。

主要涉及到如下几个修改:

①. Panel configuration

②.Panel Resolution面板分辨率、前后沿等;

③.Panel Command informatio 面板命令参数;

④.Panel Timing 面板时序

Panel configuration:

仅需关注PanelType 、PanelFrameRate;

对于PanelType:描述面板支持的是video模式还是命令模式

 0 = VIDEO_MODE

1 = COMMAND_MODE

对于大多LCD而言,用的是video模式,配置为0即可;

PanelFrameRate:刷新率,数值越大,显示越流畅,大多能支持到60的帧率。

高通驱动,android msm8953 驱动开发,android,驱动开发

panel confgtation

Panel Resolution:

配置分辨率 、前后沿、脉冲宽度

高通驱动,android msm8953 驱动开发,android,驱动开发

panel resolution

Panel Color Information:描述颜色格式和颜色顺序。

ColorFormat:

24 = 888_RGB

18 = 666_RGB

16 = 565_RGB

12 = 444_RGB

8 = 332_RGB

3 = 111_RGB

ColorOrder:

0 = DSI_RGB_SWAP_RGB

1 = DSI_RGB_SWAP_RBG

2 = DSI_RGB_SWAP_BGR

3 = DSI_RGB_SWAP_BRG

4 = DSI_RGB_SWAP_GRB

5 = DSI_RGB_SWAP_GBR

对于9881c LCD 支持RGB888,故配置如下即可,不需交换顺序:

高通驱动,android msm8953 驱动开发,android,驱动开发

Panel Color Information

Video mode panel information:

修改TrafficMode即可,TrafficMode:流量模式。

0 = non burst with sync pulses

1 = non burst with sync start event

2 = burst mode

高通驱动,android msm8953 驱动开发,android,驱动开发

video mode panel information

Lane Configuration:

配置通道数量、通道使能及映射关系。

DSILaneMap:映射关系

0 = DLANE_SWAP_0123

1 = DLANE_SWAP_3012

2 = DLANE_SWAP_2301

3 = DLANE_SWAP_1230

4 = DLANE_SWAP_0321

5 = DLANE_SWAP_1032

6 = DLANE_SWAP_2103

7 = DLANE_SWAP_3210

通常配置为0,不改变通道映射关系。

LaneXState:对应通道是否使能

1 = ENABLE

0 = DISABLE

DSILanes:通道数量:

2 for 2 lane panel

4 for 4 lane panel

9881c支持4通道,配置如下即可

高通驱动,android msm8953 驱动开发,android,驱动开发

                                                Lane Configuration

Backlight:

配置背光最小最大亮度以及背光方式

BLMinLevel:背光最小值

BLMaxLevel:背光最大值

BLPMICControlType:背光类型

0 = PWM GPIO

1 = WLED

2 = DCS COMMANDS (for

OLED panel backlight controller)

3 = LPG

对于9881c 为WLED

配置如此下:

高通驱动,android msm8953 驱动开发,android,驱动开发

                                                        Backlight

Panel Command information:

mipi 命令,也是最重要的部分,这个决定了面板显示效果,通常调效果,更新主要是这部分,主要包含

OnCommand(上电初始化代码) 、OffCommand(下电反初始化代码)

通常给到的屏参格式如下:

REGISTER, CMD(Hex), Number(Hex), DATA(Hex), DATA(Hex), ....

高通驱动,android msm8953 驱动开发,android,驱动开发

屏厂给到的屏参

高通平台mipi参数格式如下:

REGISTER, WAIT, PayloadSize(2 byte), Payload(CMD,DATA,DATA)

其中:

REGISTER=0x39, 0x01, 0x00, 0x00,

PayloadSize = Number+1

Payload = CMD,DATA,DATA,

据此,可将屏厂给到的屏参转换如下:

REGISTER,FF,03,98,81,03 转换成:

0x39, 0x01, 0x00, 0x00, 0x00,0x00,0x00,0x04,0xFF,0x98,0x81,0x03

高通驱动,android msm8953 驱动开发,android,驱动开发

转换成平台格式屏参

Panel Timing:

需要配置如下三个值:

PanelTimings:长度为12的数组,用于指定面板时序

TClkPost:DSI timing control clock post value

TClkPre:DSI timing control clock pre value

这个时序需通过高通配套的excel 表格生成(注意,只能使用微软excel生成)

①.选择表单DSI and MDP registers,配置红框参数:

高通驱动,android msm8953 驱动开发,android,驱动开发

Generate DSI Timing

②.选择表单DSI PHY timing setting,

按下Ctrl+j,如下:此时Check for T_CLK_ZERO为红色。

高通驱动,android msm8953 驱动开发,android,驱动开发

ctr+j

再按下Ctrk+k,此时Check for T_CLK_ZERO变成绿色,说明参数有效。

高通驱动,android msm8953 驱动开发,android,驱动开发

ctrk+k

再按下Ctrk+k,此时Check for T_CLK_ZERO变成绿色,说明参数有效。

此时DSI PHY registers的值即PanelTimings,TClkPost、TClkPre也得出

高通驱动,android msm8953 驱动开发,android,驱动开发

时序生成

到这里,就可以生成lk 和 kernel需要的dtsi 和头文件:

在/device/qcom/common/display/tools

执行perl parser.pl panel_xxx_xxx_vide.xml panel 生成对应的dtsi 和.h

其中,dtsi复制到kernel/msm-4.9/arch/arm64/boot/dts/qcom/

.h复制到bootable/bootloader/lk/dev/gcdb/display/include/

配置lk 和 kernel:

配置kernel:

包含dtsi:

kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8953-mdss-panels.dtsi

高通驱动,android msm8953 驱动开发,android,驱动开发

inclued dtsi

对于此平台,需添加DSI PHY 2.0.0 timing

高通驱动,android msm8953 驱动开发,android,驱动开发

DSI PHY 2.0.0 timing

高通驱动,android msm8953 驱动开发,android,驱动开发

dtsi添加DSI PHY 2.0.0 timing

其对应关系如下:

高通驱动,android msm8953 驱动开发,android,驱动开发

dtsi 与 DSI PHY 2.0.0 timing对应关系

同理lk  .h也需添加DSI PHY 2.0.0 timing

高通驱动,android msm8953 驱动开发,android,驱动开发

lk 添加DSI PHY 2.0.0 timing

背光控制:

对于背光控制有如下3种类型:

"bl_ctrl_pwm" = Backlight controlled by PWM GPIO
"bl_ctrl_wled" = Backlight controlled by WLED
"bl_ctrl_dcs" = Backlight controlled by DCS commands
 

这里是pwm控制,设置qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";

如果未配置或配置错误,那么进入kernel后,显示将无背光导致黑屏。

高通驱动,android msm8953 驱动开发,android,驱动开发

配置lk

Panel configuration 和Lane configuration 需要稍微修改下,如下:

高通驱动,android msm8953 驱动开发,android,驱动开发

修改Panel configuration

高通驱动,android msm8953 驱动开发,android,驱动开发

修改Lane configuration

以及前面提到的lk 添加DSI PHY 2.0.0 timing。

二.LCD兼容

接下来,把新增的面板添加lk 启动代码中:

仿照其它面板,添加新增的面板即可,如下:

高通驱动,android msm8953 驱动开发,android,驱动开发

添加到面板数组

前面生成了.h头文件,其目的是在为了在下边函数调用,将头文件数据配置到panel_struct 结构体,方便调用。

高通驱动,android msm8953 驱动开发,android,驱动开发

面板数据初始化

最后,在面板选择函数,新增面板。oem_panel_select()作用是lk在启动后通过auto_pan_loop计数,每遍历一个面板auto_pan_loop加1,直到auto_pan_loop不再增加,面板遍历完。在遍历过程中,lk通过上一步init_panel_data()配置的mipi.panel_read_cmds读取该面板的panel id,并与mipi.signature校验值比较,相等说明面板匹配上,否则遍历下一个面板。

这也是LCD兼容的原理。

高通驱动,android msm8953 驱动开发,android,驱动开发

面板选择函数

说到这,我们在签名配置的面板初始化函数panel_read_cmds 和mipi.signature,在生成.h时是没生成相应的命令的,需要我们自己配置。

高通驱动,android msm8953 驱动开发,android,驱动开发

panel id 读取相关命令

这个读取命令和正确值是屏厂给到的,没有的话给屏厂要即可。这里9881c panel id 读取和 正确值配置如下:

高通驱动,android msm8953 驱动开发,android,驱动开发

panel id 读取命令

高通驱动,android msm8953 驱动开发,android,驱动开发

panel id 正确数值

经过上面一大串的配置修改,现在可以编译烧录了,编译lk 、kernel、 dtbo,并烧录开机。

现象:开机无显示,黑屏

说明 lk阶段屏显已经异常了!

查看串口信息,打印如下:

高通驱动,android msm8953 驱动开发,android,驱动开发

kernel 阶段日志

可以知道lk 通过该cmdline 传递给kernel的屏是:qcom,mdss_dsi_ili9881d_720p_video,而我们接的是9881c,panel_node_id 是

qcom,mdss_dsi_wd10131ab_720p_video。说明在lk阶段面板选择上就已经出现问题。

再往前看lk 日志,如下:

高通驱动,android msm8953 驱动开发,android,驱动开发

高通驱动,android msm8953 驱动开发,android,驱动开发

lk阶段日志

可知auto_pan_loop=:0,lk尝试加载WD10131AB这个我们实际接上的面板,但是dsi panel init error,即面板初始化失败。

接下来查找"dsi panel init error"出处,看具体错误:

bootable/bootloader/lk/platform/msm_shared/mipi_dsi.c:

高通驱动,android msm8953 驱动开发,android,驱动开发

dsi panle init error 出处

进一步往下排查:

mdss_dsi_config

    - ->mdss_dsi_panel_initialize

                -->mdss_dsi_read_panel_signature

增加打印,panel id 读取值打印为0,signature值与配置的一致,说明是panel id读取失败导致9881c面板初始化提前结束退出 ,在遍历到最后一个面板9881d默认选择了它,因此选择的屏与实际不一致,导致屏不亮!

高通驱动,android msm8953 驱动开发,android,驱动开发

panle id校验函数

到这就有郁闷了。。。

这么看似乎是panel_read_cmds 与 mipi.signature值不对,然而并不是,这块屏在其它平台用过,确定panel_read_cmds 与 mipi.signature值没填错。

好吧,接下来排查其它因素,经过一番排查,发现是.h上电初始化命令 video_on_command需要增加一个命令ff 98 81 01.

重新编译烧录上电,成功!!!

如果有人知道何这串命令为会与panel id读取相关,欢迎留言告知,感谢~

高通驱动,android msm8953 驱动开发,android,驱动开发

video_on_commadn上电初始化命令

三.LCD方向调整

到此,LCD已经点亮正常显示,还有个小问题需要解决:因结构原因,屏幕显示方向翻转180度。查阅手册,高通平台支持dtsi配置

项"qcom,mdss-dsi-panel-orientation"修改屏显方向。

其控制逻辑在:

kernel/msm-4.9/drivers/video/fbdev/msm/mdss_dsi_panel.c:

高通驱动,android msm8953 驱动开发,android,驱动开发

面板方向控制逻辑

可知"qcom,mdss-dsi-panel-orientation"有如下取值:

qcom,mdss-dsi-panel-orientation="180"

qcom,mdss-dsi-panel-orientation="hflip"

qcom,mdss-dsi-panel-orientation="vflip"

故修改dtsi如下:

高通驱动,android msm8953 驱动开发,android,驱动开发

dtsi配置面板方向

到此,LCD调试完成,但是!!!此前用到的另一款屏是720*1080,这款是800*1280.

显然开机LOGO需要适配不同分辨率的LCD。

下一篇讲解Android 高通MSM8953平台 开机logo 多分辨率适配文章来源地址https://www.toymoban.com/news/detail-687024.html

到了这里,关于高通Android msm8953 驱动开发(一)--LCD调试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android底层驱动开发(十一)

    目录 一、WiFi开发流程 二、计算机网络 (一)HTTP报文格式 (二)TCP报文格式 (三)UDP(User Datagram Protocol)报文 (四)IP报文格式 三、总线与通信协议 (一)基本概念 (二)GPIO (三)I2C (四)PCIe (五)UART (六)SPI (七)MIPI (八)USB 四、Linux内核无线子系统 (一)相

    2024年02月06日
    浏览(64)
  • android平台驱动开发(一)

    hello world 最简单的hello world 驱动 在AU_LINUX_ANDROID_LA.VENDOR.1.0kernel_platformmsm-kerneldriversmisc目录下新建hello_world文件夹 并创建hello_world.c hello_world文件夹下新建Makefile 修改misc目录下的Makefile AU_LINUX_ANDROID_LA.VENDOR.1.0kernel_platformmsm-kerneldriversmiscMakefile 注:obj-m最好是以宏控的方式

    2023年04月18日
    浏览(31)
  • 使用VS2019开发调试Android动态库

    SDK可以安装指定的platforms和ndk-bundle。为了兼容性考虑,单独安装了版本比较老的android-ndk-r10b 安装VS2019并选择:使用C++的移动开发。 使用USB数据线连接开发手机并打开开发手机的USB调试选项。 启动VS2019,选择创建新项目 下拉框选择C++、Android,列表选择动态共享库(Android)

    2023年04月08日
    浏览(43)
  • 高通平台&MTK平台驱动开发流程

    高通(Qualcomm)是全球领先的无线通信技术解决方案提供商,尤其在移动通信领域有深远的影响。高通的Snapdragon系列处理器广泛应用于智能手机、平板电脑、智能手表等多种设备中。Snapdragon处理器以其优异的性能、高效的能耗比以及强大的图形和视频处理能力而著称。高通平

    2024年04月13日
    浏览(45)
  • Android高通8.1 Selinux问题

    1、最近客户提了一个需求,说要在user版本上面切分辨率,默认屏幕分辨率是 2.5 k 执行adb shell指令之后变成 4k 然后adb shell wm size可以查看 2、一开始我能想到就是在文件节点添加权限,这里不管是mtk还是qcom(高通平台)或者其他的,我首先能想到在device/目录下 init.xxx.rc文件中

    2024年02月13日
    浏览(41)
  • android驱动开发从零到一

    本人是在win10里安装vmware workstation16软件,然后在vmware里创建了ubuntu18.04系统的虚拟机 安卓开发板用的是北京迅为的rk3568开发板 step1.下载android11源码 step2.编译android源码(make命令) step3.编写驱动文件 step4.构建镜像(build.sh) (有两种加载驱动的方式) step5.镜像烧写至rk3568开发板

    2024年02月02日
    浏览(49)
  • 高通Android12增加自定义实体按键

    2024年01月17日
    浏览(45)
  • 高通 Android 12/13获取IMIE号

    1、由于我们工厂smt需要显示imei号,因此需要 2、查阅相关资料Android O(之后)Android 10之后进行限制  3、通过反射获取 imei号  4、通过 TelephonyManager 中getImei()方法获取 5、结果 获取imei号 如下图所示     6、到这里基本结束了,转载请注明出处,谢谢 7、记得添加系统权限 否则

    2024年02月11日
    浏览(42)
  • 【Linux驱动开发】编译Android12源码

    基于讯为电子rk3568教程 rk_android12.0_sdk_20220720.tar.gz 解压 设置屏幕配置 整体编译 Android 固件 使能编译环境 开始整体编译 rockdev/Image-rk3568_s // 编译成功镜像存放位置 单独编译u-boot (方法一) 编译完成后在 u-boot 目录会生成 rk356x_spl_loader_v1.13.112.bin 文件、uboot.img 文件、 resourc

    2024年02月05日
    浏览(44)
  • Android WebView 开发通过 chrome://inspect 调试页面设置

    1. 首先在app/src/main/AndroidManifest.xml 设置允许对app debug 2. 在初始化 WebView 时调用 webView.setJavaScriptEnabled(true) 方法 3. 手机端/模拟器安装移动端chrome浏览器,如果是配合pc端chrome调试,手机端chrome版本不能比pc端chrome版本高,否则可能无法成功调试。此外也可以使用手机端chrome+

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包