微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > MTK平台开机初始化时 camera驱动流程

MTK平台开机初始化时 camera驱动流程

时间:10-02 整理:3721RD 点击:
mtk的驱动多是以模块加载的方式(module_init();module_exit();)加载到内核中去的;正因为如此开机初始化加载内核的时候。就会加载这些驱动;
下面开机过程中CAMERA动作和打开应用时camera动作2个方面来解析camera驱动:
1.开机时,camera完成了sensor框架的初始化,id检测,以及上下电操作;
开机初始化软件上实现cpu识别camera sensor 的流程图如下图片:


解析下图片的流程:

Hal层在开机初始化调用文件   Imgsensor_drv.cpp

          (MTK8163\vendor\mediatek\proprietary\platform\MT8163\hardware\mtkcam\hal\sensor)

中的impSearchSensor(pfExIdChk pExIdChkCbf) 函数,这个函数执行4个功能:


  1).用GetSensorInitFunCLIst(&m_pstSensorInitFunc)函数获取目前所有的camera sensor 列表,这些前后camera都在projectconfig.mk 已经设置。

2).用KDIMGSENSORIOC_X_SET_DRIVER向Kd_sensorlist.c

    (mtk8163\kernel-3.10\drivers\misc\mediatek\imgsensor\src\mt8163) 中的CAMERA_HW_Ioctl传值,通过case分支最终调用kdSetDriver函数,根据在projectconfig.mk文件里面的main sub camera的配置,找到相应的前后camera具体的驱动文件,即对于正在遍历的这颗sensor,挂街上具体的底层驱动接口。

3).用KDIMGSENSORIOC_T_CHECK_IS_ALIVE向Kd_sensorlist.c 中的CAMERA_HW_Ioctl(即前面讲到的上层操作底层的接口)传值,通过case分支最终调用adopt_CAMERA_HW_CheckIsAlive函数,在这个函数里开始给前面找到的所有camera上电,并通过向具体驱动里面的ioctrl函数传递SENSOR_FEATURE_CHECK_SENSOR_ID参数,最终通过case分支调用对应的函数通过I2C读取并核对是否为该sensor的 id,去识别具体的camera sensor id

4).分别对前后已经配对了sensor id的camera执行m_pSubSensorInfo =m_pstSensorInitFunc.pSensorInfo;通过这个函数会调用具体驱动(这里以gc21452M 的前摄像头为例) UINT32GC2145mipiGetInfo()函数,这个函数是获取sensor IC preview capture vedio时的帧率 丢帧 打开时候的默认窗口,数据传输的type等基本信息。

通过上面的4步,kernel内核已经识别了主板上的硬件camera IC了,并获取具体sensorIC的基本信息。


2.开应用时,camera会有上电,完成寄存器的初始配置,向上层传送基本参数及配置信息,以及preview和capture模式循环

   客户端在点击对应camera图标开始进入previewcaputure vedio 应用操作时候,上层应用会启动上层的服务程序去调用Imgsensor_drv.cpp文件里面的ImgSensorDrv:pen(MINT32 sensorIdx)函数,通过函数KDIMGSENSORIOC_T_OPEN()最终调用具体驱动UINT32 GC2145MIPIOpen(void)这个open函数。

这个函数主要目的:通过调用GC2145MIPI_Sensor_Init函数,对相关capturepreview Vidio动作的3A寄存器进行初始化,从而启动相应的操作。





不错,点个赞

支持美女原创。

不错,谢谢分享!

感谢,最近也在学习camera

谢谢,讲的很好

小编,请问一下,我使用串口怎么抓取不到impSearchSensor的log信息

mark

点赞,学习了

先Mark:lol:lol

路过看看

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top