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啟動階段適配新屏幕的大概流程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM