一、sensor驱动源码寻找
以Hi3519AV100 imx334为例子
1、sample入手,sensor层驱动在component/isp中
(mpp\component\isp\sensor\imx334)
2、底层i2c驱动在kernel中
二、sensor驱动的框架
1、mpp定义了一套sensor驱动的实现和封装
2、xxxx_cmos.c中定义回调和上层函数
(面向功能)
/*应用层和sensor驱动之间的一个接口,
sensor驱动里所有的函数最后都是在这个函数中被关联定位起来的*/
static HI_S32 sensor_register_callback(VI_PIPE ViPipe, ALG_LIB_S *pstAeLib, ALG_LIB_S *pstAwbLib)
{
/*用来注册ISP有关 sensor操作
stSnsAttrInfo:sensor的ID编号
stIspRegister:里面定义了sensor的操作接口*/
s32Ret |= HI_MPI_ISP_SensorRegCallBack(ViPipe, &stSnsAttrInfo, &stIspRegister);
/*用来注册AE有关 sensor的操作*/
s32Ret |= HI_MPI_AE_SensorRegCallBack(ViPipe, pstAeLib, &stSnsAttrInfo, &stAeRegister);
/*用来注册AWB有关 sensor的操作*/
s32Ret |= HI_MPI_AWB_SensorRegCallBack(ViPipe, pstAwbLib, &stSnsAttrInfo, &stAwbRegister);
/*一般还有个AF*/
}
3、xxxx_sensor_ctl.c中定义底层硬件相关的寄存器值配置函数
(面向寄存器)
/*操作sensor寄存器*/
int imx334_write_register(VI_PIPE ViPipe, int addr, int data)
{
#ifdef HI_GPIO_I2C /*如果定义了GPIO_I2C(IO模拟I2C)*/
#else
}
4、kernel中的I2C驱动提供i2c层面的物理层操作接口
(只关系物理层,真正操作硬件IIC)
目前感觉比较重要的东西写上去了,主要自己记录备忘,欢迎大家参考交流,后续这块有什么新的理解,或者觉得比较重要的应该也会更新上去