当前位置: 代码迷 >> Android >> MSM8909+Android5.1.1之BSP-增多ili9806e(display LCD)的支持
  详细解决方案

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

热度:1052   发布时间:2016-04-27 22:02:45.0
MSM8909+Android5.1.1之BSP---增加ili9806e(display LCD)的支持

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,[email protected] { //包含mdss_mdp          compatible = "qcom,mdss_mdp";          ...      }     mdss_dsi0: qcom,[email protected] { //包含mdss_dsi0        compatible = "qcom,mdss-dsi-ctrl";        ...     }   }

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

make aboot

make bootimage

 

 

相关帖子:

http://bbs.csdn.net/topics/391868488?page=1#post-400625736

 

  相关解决方案