MTK驅動 lcm驅動載入及呼叫流程

2021-09-24 15:54:19 字數 2905 閱讀 4963

使用mt6739平台4.4核心,按下開機鍵,液晶開始顯示,從而進入lk載入lcm的階段

lk執行流程:

開機執行

vendor/mediatek/proprietary/bootable/bootloader/

目錄下

從preloader/platform/mt6739/src/core/main.c開始執行

→執行lk/platform/mt6739/platform.c的void platform_init(void)

→執行lk\platform\mt6739\mt_disp_drv.c的void mt_disp_init(void *lcdbase)

→ 執行 lk\platform\mt6739\primary_display.c的primary_display_init()

→最後執行lk\platform\mt6739\disp_lcm.c的disp_lcm_handle* disp_lcm_probe()

執行disp_lcm_handle* disp_lcm_probe之後獲取lcm驅動列印的資訊:

分析 disp_lcm_probe:

開始分析程式流程:

if (check_lcm_node_from_dt() == 0) 

//check_lcm_node_from_dt是判斷dev目錄mt65xx_lcm_list.c檔案的lcm_name_list陣列

lcm_drv= lcm_driver_list[i];//獲取mt65xx_lcm_list.c檔案的lcm_driver_list陣列資料

lcm_drv->get_params(&hlcm_param);

plcm->drv = lcm_drv;

if (lcm_id == lcm_inte***ce_notdefined ||(lcm_id != lcm_inte***ce_notdefined && plcm->lcm_if_id == lcm_id))//判斷獲取的id值

{ handle = _display_inte***ce_path_init(plcm);//液晶介面的資料獲取及初始化

if (lcm_drv->compare_id != null) //再次判斷id值

_display_inte***ce_path_deinit(handle);

}_dump_lcm_info(plcm);//列印現在使用的lcm驅動的資訊

這個函式會呼叫到lk中lcm ic 驅動檔案的compare_id函式,返回lcd的id,id存在的話,就會break跳出遍歷,告訴系統使用當前這個lcm,這樣目的就是取得機器上當前所使用的lcm的各種資訊

最後執行到vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt6739\primary_display.c的

int primary_display_init(char *lcm_name)呼叫pgc->plcm = disp_lcm_probe( lcm_name, lcm_inte***ce_notdefined)

這樣lk部分就跑完了

kernel部分:

驅動函式從\kernel-4.4\drivers\misc\mediatek\video\mt6739\videox\mtkfb.c的__init mtkfb_init(void)開始執行

分析 mtkfb_probe(struct platform_device *pdev)函式執行流程:

--→ _parse_tag_videolfb();//獲取驅動節點,並列印資訊

--→dts_gpio_state = disp_dts_gpio_init_repo(pdev);//獲取dts fb驅動的配置資訊

if (dts_gpio_state != 0)

dev_err(&pdev->dev, "retrieve gpio dts failed.");

--→fbi = framebuffer_alloc(sizeof(struct mtkfb_device), &(pdev->dev));//分配位址空間

fbdev->fb_info = fbi;//傳到info結構體

--→primary_display_init(mtkfb_find_lcm_driver(), lcd_fps, is_lcm_inited)

//呼叫kernel-4.4\drivers\misc\mediatek\video\mt6739\videox\primary_display.c的

primary_display_init()函式

--→呼叫kernel-4.4\drivers\misc\mediatek\video\mt6739\videox\disp_lcm.c的disp_lcm_probe

//跟lk是一樣操作獲取mt65xx_lcm_list.c的陣列資訊

--→mtkfb_register_sysfs(fbdev);

--→register_framebuffer(fbi);//註冊fb裝置

_parse_tag_videolfb()會列印下面資訊

這是mtkfb_init開始到成功的資訊 

到此,kernel的lcm驅動資訊就載入完了 

framebuffer裝置一些註冊,操作在kernel-4.4\drivers\video\fbdev\core\fbmem.c檔案中實現

MTK平台LCM驅動載入流程

安卓系統從power鍵按下釋放,到lcm驅動顯示,整個驅動的載入流程as follows lk階段 首先執行main.c vendor mediatek proprietary bootable bootloader preloader platform mt6739 src core main.c...

MTK平台驅動除錯指南

gpio設定篇 一 gpio有關的函式 1 gpio modesetup 函式原型 void gpio modesetup kal uint16 pin,kal uint16 conf dada 功能 設定gpio的工作模式是作為gpio,還是作為專有功能介面。引數 pin gpio 的pin腳號,...

MTK手機驅動培訓資料

1 lcd的除錯 一般lcd廠商在提供樣品的時候,都會提供給初始化 服務更好的還會提供進入和退出sleep的 如果廠商不提供的話,就只有看著文件自己寫了。我們的工作一般是調節顯示效果以及和廠商溝通,還有就是把廠商給的 整合程序式裡面去。lcd驅動程式相關的檔案主要包括lcd.c,lcd sw.h以及...