最近公司项目新换了一个不在支持列表中的camera,记录一下调试流程,以方便以后查阅。
1、第三方提供kernel的驱动代码以及hal层的效果代码。
kernel代码拷贝到(比如)kernel-3.18/drivers/misc/mediatek/imgsensor/src/mt6735/sc2232_mipi_raw_sub/
hal代码拷贝到(比如)vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor/sc2232_mipi_raw_sub/
文件名很重要,不能随便写,两处代码中的SENSOR_ID和SENSOR_DRVNAME要一致,并且和下文中的定义也要一致。
2、修改sensorlist.cpp添加sensor相关配置(如下图)
DRVNAME后面的sc2232_mipi_raw_sub就是对应文件夹名,所以第一步中的文件名不能随便写。
3、添加sensor ID和DRVNAME的定义
两处定义的顺序要一致!!!
4、绑定函数入口
注意红框的名字必须和kernel驱动代码中此函数的名字一致。
5、修改上下电时序,关键是上电时序
代码位置:kernel-3.18/drivers/misc/mediatek/imgsensor/src/mt6735/camera_hw/kd_camera_hw.c
函数名:kdCISModulePowerOn,注意if中判断的sensor name,不同的模组上电时序不同,请仔细阅读datasheet
另外若想修改I2C读写时的i2c-bus-num,请注意修改kernel驱动代码的这里
返回值有两个0和1,走的i2c总线不一样,i2c选择不对时kernel的日志上会看到i2c发送超时或者无应答错误。
I2C挂载的具体实现在kernel-3.18/drivers/misc/mediatek/imgsensor/src/mt6735/kd_sensorlist.c中,不管使用的是什么模组,mtk都会先注册main-camera和sub-camera,上面截图中会决定你的camera的i2c是哪一路,即在mtk已经注册的main和sub中选择一个。
6、添加config使相关修改编译进去
hal的修改对应配置在ProjectConfig.mk(在device目录下),可以搜索IMGSENSOR查看
kernel的修改对应配置在kernel-3.18/arch/arm64/configs/,可以搜索IMGSENSOR查看
注意ProjectConfig.mk修改时若不清楚对应的MAIN_LENS和SUB_LENS的设置,请先设置为dummy_lens,此设置项对应相机的AF功能。
至此一颗新的sensor添加完成。
备注:关于preview size 白平衡等相关设置的位置在vendor/mediatek/proprietary/custom/mt6735/hal/D1/sendepfeature/