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脚的定义。