MSM8909+Android5.1.1之BSP---增加ili9806e(display LCD)的支持(转)


 

Mobile display processor: MDP 3.05 for display processing

DCS (DisplayCommandSet):DCS是一个标准化的命令集,用于命令模式的显示模组

 

1.     硬件原理图


 

图1

 

GPIO_24引脚功能是MDP verticalsync – primary Configurable I/O,如果我们有第2个显示屏,还会用到GPIO_25引脚MDP vertical sync –secondary Configurable I/O,这里我们只用到GPIO_24。

 

TP和背光部分后面再介绍。

 

2.     支持ili9806e显示屏

 

Before starting any porting, verify thatyou are using the latest Android device tree and Qualcomm’s proprietary source.How to generate Panel dtsi/header file: Take these steps to update the XMLfiles for display.

参考device\qcom\common\display\tools\README.txt

 

2.1   生成panel dtsi/头文件

参考device/qcom/common/display/tools/README.txt文件,以tools文件夹下的《dsi-panel-nt35596-1080p-video.dtsi》为样本,我们复制一份并命名为取名为panel_ili9806e_wvga_video.xml,根据ili9806e及原理图修改其中的内容然后用命令:perl parser.pl panel_ili9806e_wvga_video.xml panel生成dsi-panel-ili9806e-wvga-video.dtsi和panel_ili9806e-wvga-video.h文件

 

这里我们重点介绍如何根据显示屏驱动IC厂家给的初始化代码来填写panel_ili9806e_wvga_video.xml文件

 

(1)  上电初始化部分

//***************Page 1 Command******************************//

REGISTER,FF,5,FF,98,06,04,01     //Change to Page 1

REGISTER,08,1,10                 // output SDA

REGISTER,21,1,01                 // DE = 1 Active

REGISTER,30,1,02                 // 480 X 800

 

在bootable/bootloader/lk/dev/gcdb/display/include/找到自带的文件panel_ili9806e_fwvga_video.h可知初始化的mipi包数据类型为0x39,见下图:


图2

根据初始化代码填写的panel_ili9806e_wvga_video.xml上电初始化内容如下:


图3

上图对应的结构体如下:

kernel\drivers\video\msm\mdss\mdss_dsi_cmd.h

struct dsi_ctrl_hdr {
       chardtype;   /* data type */
       charlast;      /* last in chain */
       charvc; /* virtual chan */
       charack;      /* ask ACK from peripheral */
       charwait;     /* ms */
       shortdlen;    /* 16 bits */
} __packed;
 
struct dsi_cmd_desc {
       structdsi_ctrl_hdr dchdr;
       char*payload;
};

(2)  MIPI DSI接口

根据原理图知道采用的是DSI接口,

采用MIPIDSI Interface接口

? DSI兼容的外设支持Command或Video操作模式,用哪个模式由外设的构架决定

? Command模式是指采用发送命令和数据到具有显示缓存的控制器。主机通过命令间接的控制外设。Command模式采用双向接口

? Video模式是指从主机传输到外设采用时实象素流。这种模式只能以高速传输。为减少复杂性和节约成本,只采用Video模式的系统可能只有一个单向数据路径

 

? Command Mode(类似于MPU接口)

   ? Video Mode(类似于RGB接口)- 必须用高速模式传输数据

command还是video模式由Driver IC RAM决定:

  1.带RAM IC可支持 command及video模式

  2.不带RAM IC只支持video模式

 ILI9806E不带RAM.

 

2.2   Lk支持ili9806e显示屏

(1)  增加显示屏头文件

拷贝上面生成的panel_ili9806e-wvga-video.h文件到

bootable/bootloader/lk/dev/gcdb/display/include/目录下。

 

(2)  bootable\bootloader\lk\target\msm8909\oem_panel.c增加对新显示屏的支持

#include "include/panel_ili9806e_wvga_video.h"
enum {
       HX8394D_720P_VIDEO_PANEL,
       SHARP_QHD_VIDEO_PANEL,
       TRULY_WVGA_CMD_PANEL,
       HX8379A_FWVGA_SKUA_VIDEO_PANEL,
       ILI9806E_FWVGA_VIDEO_PANEL,
       ILI9806E_WVGA_VIDEO_PANEL,//kandi add at 2015.11.26
       HX8394D_QHD_VIDEO_PANEL,
       HX8379C_FWVGA_VIDEO_PANEL,
       NT35512_FWVGA_VIDEO_PANEL,
       OTM9605A_QHD_VIDEO_PANEL,
       OTM9605A_QHD_CB03_VIDEO_PANEL,
       OTM9605AG_QHD_VIDEO_PANEL,
       HX8389B_QHD_VIDEO_PANEL,
       HX8389BG_QHD_VIDEO_PANEL,
       JD9161BA_FWVGA_VIDEO_PANEL,
       UNKNOWN_PANEL
};

init_panel_data()函数增加:

case ILI9806E_WVGA_VIDEO_PANEL:
                panelstruct->paneldata    = &ili9806e_wvga_video_panel_data;
                panelstruct->panelres     = &ili9806e_wvga_video_panel_res;
                panelstruct->color        = &ili9806e_wvga_video_color;
                panelstruct->videopanel   = &ili9806e_wvga_video_video_panel;
                panelstruct->commandpanel =&ili9806e_wvga_video_command_panel;
                panelstruct->state        = &ili9806e_wvga_video_state;
                panelstruct->laneconfig   = &ili9806e_wvga_video_lane_config;
                panelstruct->paneltiminginfo
                                         =&ili9806e_wvga_video_timing_info;
                panelstruct->panelresetseq
                                         =&ili9806e_wvga_video_reset_seq;
                panelstruct->backlightinfo =&ili9806e_wvga_video_backlight;
                pinfo->mipi.panel_cmds
                                        =ili9806e_wvga_video_on_command;
               pinfo->mipi.num_of_panel_cmds
                                        =ILI9806E_WVGA_VIDEO_ON_COMMAND;
                memcpy(phy_db->timing,
                               ili9806e_wvga_video_timings, TIMING_SIZE);
                pinfo->mipi.signature =ILI9806E_WVGA_VIDEO_SIGNATURE;
                 panelstruct->paneldata->panel_lp11_init= 1;
                break;

oem_panel_select()函数的QRD_SKUE_CB03这case改为用新显示屏

case QRD_SKUE_CB03:
              //panel_id= HX8389BG_QHD_VIDEO_PANEL;
              //panel_id= OTM9605A_QHD_CB03_VIDEO_PANEL;
              panel_id= ILI9806E_WVGA_VIDEO_PANEL; //kandi add at 2015.11.26
              //panel_id= NT35512_FWVGA_VIDEO_PANEL;
              break;

2.3   Kernel支持ili9806e显示屏

(1)  增加显示屏对应的设备树

拷贝上面生成的dsi-panel-ili9806e-wvga-video.dtsi到

kernel\arch\arm\boot\dts\qcom目录下

 

(2)  kernel\arch\arm\boot\dts\qcom\msm8909-qrd-skue-cb03.dtsi需要包含dsi-panel-ili9806e-wvga-video.dtsi

#include"dsi-panel-ili9806e-wvga-video.dtsi"
 
&mdss_mdp {
       qcom,mdss-pref-prim-intf= "dsi";//DSI设置成主要接口
};
 
//&dsi_otm9605a_qhd_video {
//    qcom,cont-splash-enabled;
//};
 
&pmx_mdss {
       qcom,num-grp-pins= <1>;
       qcom,pins= <&gp 8>;
};
 
&pmx_mdss_te {
       qcom,num-grp-pins= <1>;
       qcom,pins= <&gp 24>;
};
 
&mdss_dsi0 {
//    qcom,dsi-pref-prim-pan= <&dsi_otm9605a_qhd_video>;
       qcom,dsi-pref-prim-pan= <&dsi_ili9806e_wvga_video>;//设置PANEL NODE
       pinctrl-names= "mdss_default", "mdss_sleep";
       pinctrl-0= <&mdss_dsi_active &mdss_te_active>;
       pinctrl-1= <&mdss_dsi_suspend &mdss_te_suspend>;
 
       qcom,platform-reset-gpio= <&msm_gpio 8 0>;
};

需要主要dsi_ili9806e_wvga_video需要和显示屏的dsi-panel-ili9806e-wvga-video.dtsi中的值一样,如下:

&mdss_mdp {
       dsi_ili9806e_wvga_video:qcom,mdss_dsi_ili9806e_wvga_video {
              qcom,mdss-dsi-panel-name= "ili9806e wvga video mode dsi panel";
…
}
}

(3)  kernel\arch\arm\boot\dts\qcom\msm8909-mdss.dtsi

&soc {
      mdss_mdp: qcom,mdss_mdp@fd900000 { //包含mdss_mdp
          compatible = "qcom,mdss_mdp";
          ...
      }
     mdss_dsi0: qcom,mdss_dsi@fd922800 { //包含mdss_dsi0
        compatible = "qcom,mdss-dsi-ctrl";
        ...
     }
   }

做上面的修改后分别编译bootloader和kernel

make aboot

make bootimage

 

 

相关帖子:

http://bbs.csdn.net/topics/391868488?page=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值