mtk6589显示子系统笔记(一)
拿到MT6589的版本不久,發(fā)現(xiàn)顯示系統(tǒng)代碼結(jié)構(gòu)改變很大。做些備忘,后續(xù)不忙的時(shí)候可以繼續(xù)看。
MT6589之前的MTK的Android系統(tǒng)顯示系統(tǒng)同featurePhone基本一致。
?
先來(lái)回顧下MTK之前版本的大致結(jié)構(gòu),每個(gè)Video層,每個(gè)UI層 分別對(duì)應(yīng)一個(gè)layer,再通過(guò)設(shè)置一些,區(qū)域坐標(biāo),透明度,通透色等,然后啟動(dòng)顯示模塊的DMA,實(shí)現(xiàn)各layer的數(shù)據(jù)的疊加,。如果是CPU接口的屏,合并后的數(shù)據(jù)往?GRAM刷,如果是RGB接口的數(shù)據(jù),那么往DDR內(nèi)存中的顯存刷,然后RGB控制器自動(dòng)從顯存來(lái)取。
?
MT6589平臺(tái),把顯示系統(tǒng)分成很多模塊。
包括,rotator模塊,scaler模塊,gamrer模塊,RDMA模塊,WDMA模塊,BLS模塊。
各種LCD接口模塊(DPI,DBI,?DSI)。
?
各個(gè)模塊的功能從名字上就可以看出來(lái)。
無(wú)非就是顏色轉(zhuǎn)換,角度轉(zhuǎn)換,數(shù)據(jù)疊加等。每個(gè)模塊的具體功能和寄存器數(shù)據(jù)手冊(cè)上寫(xiě)的很詳細(xì)。暫時(shí)沒(méi)有必要去詳細(xì)了解。
當(dāng)前目的是先了解框架,以后有問(wèn)題可以定位再深入。
如上圖就是整個(gè)顯示子系統(tǒng)的框圖。上圖中的藍(lán)色箭頭指向內(nèi)存。
?
其中 :RDMA用來(lái)準(zhǔn)備數(shù)據(jù)給DPI DSI DBI接口引擎(顧名思義read DMA)
?rdma 輸入支持兩種模式:
1. ?direct link input mode :指的是RDAM的數(shù)據(jù)源是上級(jí)的子模塊(例如overlayer 模塊)
2. memory link input mode:?指的是RDAM的數(shù)據(jù)來(lái)自?xún)?nèi)存。
?rdma 的輸出都是給顯示接口DPI 、DSI 或者DBI。
-------
MT6589有兩個(gè)RDMA。
?RDMA0支持從內(nèi)存輸入和輸出給顯示接口
RDMA1只支持內(nèi)存輸入。
如上圖中的紅色虛線(xiàn)框部分為RDMA
?------------------------------
WDMA:?Write DMA 。從框圖可以看到都是將前面幾個(gè)模塊產(chǎn)生顯示buffer 寫(xiě)入到內(nèi)存中的。
?
BLS :?自動(dòng)背光調(diào)節(jié),根據(jù)顯示的數(shù)據(jù)來(lái)決定給背光占空比的一種方式,可以節(jié)省電源消耗,例如黑色部分可以降低背光亮度。省電。
?
overlayer :??從內(nèi)存中或者前級(jí)模塊的輸出通過(guò)透明度、區(qū)域設(shè)置、等疊加,輸出為一個(gè)顯存。 這個(gè)也是核心部件。
2 。
再來(lái)分析如何使用這些模塊刷新一個(gè)圖片。 按照慣例,boot 模塊(LK)只是刷一個(gè)logo,代碼會(huì)比較簡(jiǎn)單,方便了解簡(jiǎn)單使用流程,后續(xù)有空再看kernel .
?
初始化
Platform.c (bootable\bootloader\lk\platform\mediatek\mt6589\lk)????
--》void platform_early_init(void)
首先找到顯示系統(tǒng)要用地址:(從下面可以看到和以前平臺(tái)一樣把內(nèi)存中最后一段區(qū)域的作為顯存)
?
---------------------
下面就是調(diào)用顯示初始化:
Platform.c (mediatek\platform\mt6589\lk)? --
?
?
?
?
從這里可以知道lk部分的顯示路徑
從顯示內(nèi)存(寫(xiě)提示符號(hào)的層和顯示logo的層)兩層通過(guò)overlay模塊輸出
overlay輸出作為顯示子系統(tǒng)的輸入。
以上通過(guò)disp_path_config(&config)函數(shù)把參數(shù)設(shè)置到寄存器
上面都是都是CPU斷的初始化。
最后初始化屏的寄存器。
lcm_drv->init()
--------------------
再看主要的函數(shù)????????????????????? disp_path_config
具體如下:
1.???????首先處理各個(gè)模塊的沖突以及互斥,這個(gè)不影響主流程,以后再看
2.???????根據(jù)輸出路徑配置寄存器。
pConfig->dstModule
從這里可以看出顯示系統(tǒng)輸出邏輯上支持的五種情況。
DISP_MODULE_DSI_VDO
DISP_MODULE_DPI0
DISP_MODULE_DBI
DISP_MODULE_DSI_CMD
DISP_MODULE_WDMA1
從直觀(guān)上看前四個(gè)就是顯示的接口,
最后一種WDMA是將顯示系統(tǒng)的數(shù)據(jù)輸出到內(nèi)存。支持過(guò)濾,抖動(dòng),色域轉(zhuǎn)換。
路徑配置的核心部分:
?
這部分注釋已經(jīng)很明確了,再根據(jù)顯示子系統(tǒng)系統(tǒng)模塊圖就很清晰。
可以看到,如果要刷到屏上的話(huà),都是通過(guò):
OVERLAYER模塊à經(jīng)過(guò)BLS模塊RDMA0模塊?相應(yīng)的顯示接口模塊
3.???????配置overlayer.?(既然顯示部分都來(lái)自overlay)
綜上:這個(gè)函數(shù)支持3種路徑
1. mem->ovl->wdma1->mem
2. ovl->bls->rdma0->lcd --- LK里面只用了這個(gè)模式
3. mem->rdma->lcd? --對(duì)于這種,前面沒(méi)提到補(bǔ)充下srcModule
pConfig->srcModule=DISP_MODULE_RDMA0
?-----------
初始化完了之后:
再來(lái)看如何第一次刷屏。
?
從這里看到LK里面 DPI刷屏比較簡(jiǎn)單,僅僅是重新設(shè)置了一下overlayer 參數(shù)。
轉(zhuǎn)載于:https://www.cnblogs.com/Ph-one/p/6794675.html
總結(jié)
以上是生活随笔為你收集整理的mtk6589显示子系统笔记(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 查询数据(使用聚合函数,还是单表)
- 下一篇: 1-3_基本概念_程序进程