1. 程式人生 > >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

相關帖子:

相關推薦

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

Mobile display processor: MDP 3.05 for display processing DCS (DisplayCommandSet):DCS是一個標準化的命令集,用於命令模式的顯示模組 1.     硬體原理圖 圖1 GPIO_2

10.1拓展:載入樣式(圓內個不停)

(2018/12/21  0:21 使用推薦插入程式碼功能報錯) HTML程式碼: <div class="circle"></div> CSS程式碼: html, body, .circle{ height: 100%; disp

Android實戰技巧四十:Android5.1.1原始碼編譯與燒寫

購買Nexus手機的朋友大多是為了自己修改系統玩,再加上其較高的價效比,在開發者中還是廣受歡迎的。我的5太子被我升級到了6.0預覽版,玩的正嗨,捨不得換回到5.1時代了。不過鑑於距6.0原始碼釋出還有段日子,5.1的原始碼編譯與燒寫仍是主流,下面就記錄了整個過程

Wifi原始碼學習(Android5.1wifi開關

wifi系列部落格地址: 正文: 老方法,從介面入手: 現在我們看到的這兩個介面就是android5.1 的wifi 設定介面了,我們就從這兒入手。 我們可以看到這個介面大概分為三個部分 1、開關 2、option items 3、列表

msm8909+android5.1.1--開啟除錯(debug)串列埠

1.共同修改的地方 (1)kernel\arch\arm\configs\msm8909-1gb-CB03_defconfig 使以下項有效 CONFIG_SERIAL_MSM_HSL=y CONFIG_SERIAL_MSM_HSL_CONSO

Android實戰技巧四十 Android5 1 1原始碼編譯與燒寫

                     購買Nexus手機的朋友大多是為了自己修改系統玩,再加上其較高的價效比,在開發者中還是廣受歡迎的。我的5太子被我升級到了6.0預覽版,玩的正嗨,捨不得換回到5.1時代了。不過鑑於距6.0原始碼釋出還有段日子,5.1的原始碼編譯與燒寫仍是主流,下面就記錄了整個過程(持續

MSM8909android5.1.1的LCM屏的相容———自我感悟

剛剛接觸高通平臺,需要實現兩個LCM屏組的相容。於是就各種百度,什麼讀LCD_ID,通過AD轉換實現,什麼讀IC_ID軟體實現相容,暈。於是看著前輩的log,簡單實現了屏的相容。 相容的前提是實現屏的替換,高通的屏在Android5.1.1中分為兩部分。lk與kernel。

Android5.1 系統省電模式探索一啟動流程

文章主要參考網址:http://www.th7.cn/Program/Android/201509/577840.shtml android5.1 省電模式開啟位置: 設定——電池——節電助手(充電狀態下預設無法開啟,即強制關閉) 省電模式開啟後系統狀態: 不同於其他第

Horizon7.1部署二:Horizon Composer服務器安裝

vmware horizon composerHorizon Composer是個可選服務,如果計劃部署鏈接克隆桌面池(可以節省90%磁盤利用率),則需要安裝。我在windows2016上部署的Sql Server2016,ip是X.X.X.2,並在建立一個名為Horizon Composer的數據庫,防火墻

RecyclerView的使用(1HelloWorld

prot pub lines isa osi -s pri 構造函數 java 原創文章。轉載請註明 http://blog.csdn.net/leejizhou/article/details/50670657 RecyclerView是伴隨Andr

webpack 1.x 配置的坑

blog .html 現在 file output col strong html中 logs 一、靜態資源目錄改變(默認在dist下面) 默認: webpack配置 output: { path: path.join(__dirname, ‘./dist‘)

weblogic 8.1教程部署(三)

article pan mod post mark 點擊 應該 pass bsp 在 weblogic 都配置好了之後。就能夠部署項目了。部署項目的時候,能夠大體分為兩個步驟: 1,創建緩沖池; 2,配置

[javase學習筆記]-8.1 statickeyword特點

之前 隨著 小強 pop dsm name 變量 popu tracking 這一節我們來學習java語言中一個新的keyword就是statickeyword。 當然對於每個keyword,我們都要明白的是它有什麽作用,怎麽用。我們先來看一個樣例:

linux集群系列(1) --- LVSload balancing(NET、DR、TUN)

lvs lb nat 一、簡介 1.1. 負載均衡集群:LB (load balancing) 負載均衡集群為企業需求提供了更實用的系統。如名稱所暗示的,該系統使負載可以在計算機集群中盡可能平均地分攤處理。該負載可能是需要均衡的應用程序處理負載或網絡流量負載。這樣的系統非常適合於運行同

Hadoop-2.4.1學習edits和fsimage查看器

文件的 順序 rup oev 兼容 require aps block mean 在hadoop中edits和fsimage是兩個至關關鍵的文件。當中edits負責保存自最新檢查點後命名空間的變化。起著日誌的作用,而fsimage則保存了最新的檢查點信息

android BSP與硬件相關子系統讀書筆記(1)android BSP移植綜述

tin 不用 googl csdn splay 編寫 app開發 意圖過濾器 trac 從linux驅動轉行至Android驅動開發大半年了,一開始就產生了一個很糾結目標和問題,就是不停的google如何porting android!這個問題得到的結果對於初出茅廬的我,感

3.1.1蠻力法選擇排序

特性 序表 sel div wap 數組 排列 code for 選擇排序開始的時候,我們掃描整個列表,找到它的最小元素,然後和第一個元素交換,將最小元素放到它在有序表中的最終位置上。然後我們從第二個元素開始掃描列表,找到最後n-1個元素中的最小元素,再和第

Linux運維網絡基礎學習筆記1.1

達內 linux雲計算運維 網絡基礎1.1TCP/IP詳細解讀:TCP/IP協議簡介:TCP/IP是最廣泛支持的通信協議集合---包括大量internet應用中的標準協議;---支持跨網絡架構,跨操作系統平臺的通信;主機與主機之間通信的三個要素:---IP地址;---子網掩碼;---IP路由;IP地址

1.1 學習初;1.2 約定;1.3 認識Linux;1.4 創建虛擬機;1.5安裝centos7

安裝centos7給自己定個位:1. 定位:為更好地就業,不被社會淘汰,做一名合格的運維工程師2. 目標:半年左右學習完成基礎,之後跳槽運維工作,工作中多多積累經驗3. 工資:第一次奔著8k+起,一到兩年提升到15k-20k學習:1. 班主任每天安排的學習課程完成後,如果有空余時間精力再繼續預習新的課程,每天

整理第二周C知識點1流程選擇

tro post 問題: spa 用法 整理 log 循環 必須 流程控制(重點) 1.流程控制:程序執行的數序 分類:1.順序 2.選擇 3.循環 2.選擇:某些代碼可能執行 也可能不執行,有選擇的執行一些代碼 (1)if用法: if(表達式) 語句A;//如果表達式為真