使用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以及...