高通平台點亮LCD個人總結


點擊打開鏈接

高通平台LCD模塊大致分為兩部分:KERNEL和LK。在進行點屏之前,應該認真查看LCD原理圖,弄清楚LCD亮屏需要滿足的條件和上電時序,同時可以跟LCD IC原廠拿到初始化代碼。

      首先點亮KERNEL。

      在點亮KERNEL之前,先進入bootable/bootloader/lk/target/msm****/rules.mk文件,將DEFINES += DISPLAY_SPLASH_SCREEN=1置0,disable掉LK中的顯示。然后正式進入內核開始點亮LCD。對於一個新的項目,建議先進入msm****-mtp.dtsi或者msm****-mdss.dtsi文件,找到它include的相應的屏配置文件,因為這個是平台默認使用的LCD,我們可以借鑒它來實現點亮屏。我這里項目中默認使用的是#include "dsi-panel-sharp-dualmipi0-wqxga-video.dtsi",而我需要點亮的是信利CMD屏,於是復制dsi-panel-sharp-dualmipi0-wqxga-video.dtsi並重命名為dsi-panel-truly-dualmipi0-wqxga-cmd.dtsi,因為是雙DSI,所以需要重命名兩個dtsi文件。進入重命名后的dsi-panel-truly-dualmipi0-wqxga-cmd.dtsi文件,將sharp修改為truly,將video修改為cmd,將“qcom,mdss-dsi-panel-width” 和“qcom,mdss-dsi-panel-height” 修改成相應的分辨率(其他比如hfp屬性可以先不修改),將屏初始化代碼寫入“qcom,mdss-dsi-on-command”,同時大致瀏覽一下其他屬性值,比如broadcast,如果雙dsi使用的只有一個IC,那么這個屬性必須去掉,否則會導致系統進入Android動畫之后,機器掛掉。具體去掉方法是在dualmipi0中刪除“qcom,cmd-sync-wait-broadcast”,在dualmipi1中刪除“qcom,cmd-sync-wait-broadcast”和“qcom,cmd-sync-wait-trigger”。當然這個還是不會影響LCD的顯示的。接着進入msm****-mtp.dtsi文件,將屏的dtsi文件include進來,比如#include "dsi-panel-truly-dualmipi0-wqxga-cmd.dtsi"和#include "dsi-panel-truly-dualmipi1-wqxga-cmd.dtsi",然后將DSI設置成主要接口,即qcom,mdss-pref-prim-intf = "dsi",再設置PANEL NODE,即qcom,dsi-pref-prim-pan = <&dsi_dual_truly_cmd_0>和qcom,dsi-pref-prim-pan = <&dsi_dual_truly_cmd_1>,注意的是這個值需要和屏dtsi文件里面的值保持一致。然后再添加&dsi_dual_truly_cmd_0相關代碼,注意由於LK中disable掉顯示的,這里面的qcom,cont-splash-enabled也應該disabled掉。接下來就需要根據原理圖來設置LCD和背光的各路電壓了,一般系統默認是有添加Reset的gpio口的,找到qcom,platform-reset-gpio的位置,仿照添加其他gpio口,比如lcd_reg_en供電1.8v,tps的正負5V,背光的使能口等等。這個時候注意各GPIO口的分類,PMU端和CPU端的GPIO口配置是不一樣的。到此dtsi文件就處理完畢了,接下來進入MDSS文件夾下,打開mdss_dsi.c文件,還是仿照Reset口,獲取其他gpio相應的屬性節點,同時在mdss_dsi.h中聲明。然后進入mdss_dsi_panel.c文件,在mdss_dsi_request_gpios中模仿Reset口申請其余gpio口,接下來就是重中之中的復位函數mdss_dsi_panel_reset了,這里面一定要根據上電時序來設置各路gpio口的高低電平的有效值以及下電時關閉各路電壓。

   到此理論上來說,KERNEL應該可以點亮了。接下來介紹下LK的點亮,記得先將將DEFINES += DISPLAY_SPLASH_SCREEN=1,再將qcom,cont-splash-enabled。

  在bootable\bootloader\lk\dev\gcdb\display\include目錄下,復制panel_sharp_wqxga_dualdsi_video.h並重命名panel_truly_wqxga_dualdsi_cmd.h,進入文件將sharp改為truly,video改為cmd,這里需要注意幾點,一是結構體panel_config中的panel_node_id,需要跟dtsi中的名稱保持一致;二是panel_config中的panel_type,video是MIPI_VIDEO_PANEL(0),cmd是MIPI_CMD_PANEL(1);三是初始化代碼,小於或等於2個參數的,數據占一行,參數寫在前面,datatype寫在后面,dtsi里面datatype是29的且只有2個數值的,在LK里面如果只寫成一行,則datatype寫成23,寫成二行就用29,並補0xff;大於2個參數的,第一行第一個數和第二個數之和是數值的個數(第2個一般是0x00),后面兩個是datatype,第二行開始寫數值,結尾一行不足4個的填寫0xff. (23,15,05對應80,29和39對應c0).四是在結構體mipi_dsi_cmd中,第一個參數是相應數組的總個數,包括填充的oxff在內,同時初始化命令的個數一定要修改正確,否則會導致屏不亮。在點亮LK時,建議打開命令發送完成的打印信息mipi_dsi.c--》mdss_dual_dsi_cmd_dma_trigger_for_panel--》dprintf(INFO, "Panel CMD: command mode dma tested successfully\n");有多少條命令發送成功,就有多少個successfully打印的信息。然后將此panel_truly_wqxga_dualdsi_cmd.h文件include進oem_panel.c文件,然后仿照參考的panel_sharp_wqxga_dualdsi_video.h文件對應的SHARP_WQXGA_DUALDSI_VIDEO_PANEL添加相應的truly代碼,主要是oem_panel_select和init_panel_data兩個函數,添加case TRULY_WQXGA_DUALDSI_CMD_PANEL和修改panel_id;接下來就是在display.h中仿照Reset添加各路gpio口,等同於內核中mtp文件中的添加gpio口代碼。最后就是target_display.c文件中的target_panel_reset復位函數,還是仿照Reset的配置和電平設置,來配置和設置其他各路GPIO相應的高低電平,注意gpio口的分類即可,這個和內核中的復位有點類似,只是LK和KERNEL中使用的函數可能有差異。

       此致,點亮LCD的相關代碼已經完成,這個時候LK和KERNEL應該都已經可以點亮了,如果不行,連接串口查看打印信息,解決跟LCD相關的異常信息;將各路GPIO口飛線測量各路電壓是否正常;使用示波器測試reset時序是否正常。

       當然,首先需要觀察的就是背光是否起來,如果背光不亮,也可以先使背光常亮,來排除其他的問題。


免責聲明!

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



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