zoukankan      html  css  js  c++  java
  • MSM8909中LK阶段LCM屏适配与显示流程分析(一)

    1、前言

    在驱动开发中,我们往往需要适配一些新的屏幕或者调试一些屏幕的参数等,对于Qualcomm的MSM8909这款SoC,当启动Android系统时,会有一个LK阶段,该阶段用来启动Linux内核系统,本文,将简单介绍如何在MSM8909的LK阶段中如何进行LCM屏的兼容和适配流程,并对LK阶段中,LCD屏幕的初始化和显示流程进行简要分析。

    2、LCM接口框图

    下图为LCM的接口框图,屏幕的背光灯使用PWM波进行控制:

    3、适配LCM屏幕

    接下来,将基于MSM8909的Android系统平台,介绍如何在LK阶段适配一款LCM屏幕,使用GCDB工具生成屏幕的参数文件并借助于Qualcomm的LK驱动框架,能够很快速地完成适配,下面,简单给出大概流程。

    首先进入Android源码根目录,找到GCDB工具相关的路径,并进入工具路径,运行下面命令:

    $ cd msm8909_7.1/device/qcom/common/display/tools
    $ cp panel_ili9881c_720p_video.xml panel_noname_720p_video.xml
    $ vim panel_noname_720p_video.xml

    然后,就是根据要适配的屏幕,去修改.xml中屏幕参数描述:

    • PanelID:将会生成kernel中的屏幕参数的设备树文件的名称;
    • PanelH:将会生成LK阶段的屏幕参数头文件。

    接下来,修改panel的配置信息:

    • PanelName:LCM屏幕的名称;
    • PanelType:LCM屏幕的模式,0代表VIDEO_MODE,1代表COMMAND_MODE;
    • PanelOrientation:仅在LK阶段使用,1代表旋转0度,2代表旋转180度,如果默认不配置则代表旋转0度;
    • PanelFrameRate:表示屏幕每秒的刷新频率,例如56则代表56fps。

    接下来,修改panel的分辨率配置信息:

    • PanelWidth:屏幕宽度的分辨率;
    • PanelHeight:屏幕高度的分辨率;
    • HFrontPorch:水平前廊值;
    • HBackPorch:水平后廊值;
    • HPulseWidth:水平脉冲宽度;
    • HSyncSkew:水平同步倾斜值;
    • VBackPorch:垂直后廊值;
    • VFrontPorch:垂直前廊值;
    • VPulseWidth:垂直脉冲宽度值。

     接下来,则是修改panel的颜色信息配置:

    • ColorFormat:定义了每个像素点的位数;
    • ColorOrder:定义了在msm芯片和panel之间每位颜色系列的组成。

    ColorFormat和ColorOrder值的含义如下:

    接下来,则是panel命令的信息配置:

    • OnCommand:panel打开的命令字节数组,而命令的格式如下所示:
    • OffCommand:panel关闭的的命令字节数组;
    • OnCommandState:发送OnCommand时屏幕的状态,0代表DSI_LP_MODE模式,1代表DSI_HP_MODE模式;
    • OffCommandState:发送OffCommand时屏幕的状态。

    对于命令的格式如下所示:

    经常要修改的值为PayloadSize和Payload,如下:

     接下来,修改panel在Video模式下的信息配置:

    • HSyncPulse:水平同步脉冲,它确定硬件是否发送水平同步脉冲在垂直消隐期间,0代表Sync Pulse不使能,1则代表使能;
    • TrafficMode:屏幕流量模式类型,0代表non burst with sync pulses,1代表non burst with sync start event,2代表burst mode。

    接下来,则是修改dsi线相关的配置:

    • DSILanes:DSI通信的线路数量,4则代表了4组panel线路;
    • DSILaneMap代表了数据线是怎么映射到panel上的,它的值代表如下:
    • LaneNState(N:0-3):代表了线路N的状态,1代表使能,0代表不使能。

    对于DSILaneMap的值含义如下所示:

    接下来,则是panel的时序控制相关参数配置,需要使用Qualcomm提供的工具80-NH713-1_DSI.zip自动生成:

    PanelTimings:代表了长度为12的字节数组,指定panel的时序配置;
    TClkPost:DSI时序控制时钟的post值;
    TClkPre:DSI时序控制时钟pre值。

    接下来,则是panel的背光灯信息配置:

    • BLMinLevel:代表背光灯的最小值;
    • BLMaxLevel:代表背光灯的最大值;
    • BLPMICControlType:代表背光灯的控制类型,它的值代表如下:

    通常情况下,一般都使用PWM来进行背光灯的控制。

    根据要适配的LCM屏幕配置好.xml文件后,接下来,则是使用GCDB工具命令,生成屏幕配置参数的头文件和设备树文件,对于头文件,是在LK启动阶段使用的,设备树文件则是在Linux内核驱动中使用的,命令如下:

    $ perl parser.pl panel_noname_720p_video.xml panel
    $ ls -al panel_noname*

    将会在当前目录下,自动生成的屏幕头文件和设备树文件:

    # 屏幕配置参数头文件
    panel_noname_720p_video.h 
    
    # 屏幕配置的设备树文件
    dsi-panel-noname-720p-video.dtsi 

    在本章节,只介绍在LK启动阶段中的适配,将相关的文件移动到对应使用的目录:

    对于LK启动阶段中,使用下面命令:

    $ mv panel_noname_720p_video.h ~/msm8909_7.1/bootable/bootloader/lk/dev/gcdb/display/include/

    对于Linux内核驱动,使用下面命令:

    $ mv dsi-panel-noname-720p-video.dtsi ~/msm8909_7.1/kernel/arch/arm/boot/dts/qcom/

     重点来咯,接下来就是在LK的启动文件中,基于Qualcomm的软件驱动框架,修改对应的驱动文件,将屏幕适配,步骤如下:

    编辑和修改oem_panel.c文件:

    $ cd msm8909_7.1/bootable/bootloader/lk/target/msm8909
    $ vim oem_panel.c

    首先,是添加刚刚自动生成的屏幕配置头文件:

     添加适配新屏幕的索引号,将通过该索引号选择相应的屏幕:

    在panel_list中添加适配的新屏幕,该结构体表示目标板中支持的屏幕:

    接下来,则是在init_panel_data()函数中添加新屏幕的配置参数,该函数用与初始化panel的参数配置:

    最后,则是在oem_panel_select()函数中添加新屏幕的索引号,LK启动阶段将通过该函数进行屏幕的选择:

    大概的修改步骤就描述完了,使用make aboot命令编译bootloader后,重新烧写即可。

    4、小结

    本文简单介绍了在MSM8909的Android平台中使用GCDB生成LCM屏的配置文件,并介绍了在LK启动阶段适配新屏幕的大概流程。

  • 相关阅读:
    java 事务
    JPA概述以及它和Hibernate之间的关系
    [转]JavaWeb之 Servlet执行过程 与 生命周期
    j2EE的web.xml详解
    安装PyTorch 0.4.0
    [转]springmvc常用注解标签详解
    hibernate的dialect大全
    Hibernate快速入门
    DBUtils使用详解
    用户密码初始化
  • 原文地址:https://www.cnblogs.com/Cqlismy/p/12019317.html
Copyright © 2011-2022 走看看