1. 程式人生 > >mtk-camera驅動開機識別流程

mtk-camera驅動開機識別流程

mtk平臺在開機的時候你會發現camera上下電達6次之多,main和sub camera分別上下電了3次(以下簡稱main或sub來表示後攝或前攝),這麼多上下電過程都是用來做什麼的呢,今天我詳細研究了一下,大致總結如下:

mtk的camera驅動會先註冊兩個camera通道,即main和sub。通道包括mipi匯流排、i2c匯流排、RST、PWDN,這些註冊過程和camera模組的具體型號完全沒有關係。只有在開機時才會對映到具體的camera模組驅動上。這一步的相關程式碼請參考

kernel-3.18/drivers/misc/mediatek/imgsensor/src/mt6735/kd_sensorlist.c(main和sub的註冊)

kernel-3.18/drivers/misc/mediatek/imgsensor/src/mt6735/camera_hw/kd_camera_hw.c(camera的電源控制)

開機時,系統會根據mk檔案中配置的main和sub去執行,首先系統需要驗證該main和sub是否存在,如何驗證的呢?

因為mtk註冊了2個camera通道,所以系統先讓idx=0,分別對配置的main和sub進行上電,然後讀其sensor ID,這個過程中如果讀到的sensor ID和系統中配置的ID匹配上了,則idx0通道對映到該camera上,這個過程main和sub分別發生一次上下電;然後系統讓idx=1,再分別對配置的main和sub進行上電,然後讀其sensor ID,這個過程中如果讀到的sensor ID和系統中配置的ID匹配上了,則idx1通道對映到該camera上,這個過程main和sub也會分別發生一次上下電。

上面的過程共發生了4次上下電,如果不出問題的話,則會配對完成;最後,系統會分別對main和sub進行一次初始化配置,這樣就再發生2次上下電。

另外,mtk系統是以idx0作為後攝的,idx1作為前攝,和mk檔案中配置的前後攝關係不大。而idx0和idx1在電路上最大的區別就是RST和PWDN,詳情請檢視DTS中camera rst/pdn pin腳的定義。