1、先梳理下camera的驱动架构,如下是驱动展开后的代码目录
简单介绍下几个比较重要的文件:
inc->kd_imgsensor.h -----定义sensor id 和sensor name
src->mt6580->camera_hw->kd_camera_hw.c -----配置camera的上电时序
src->mt6580->kd_sensorlist.h------结合对应的sensor id和名字绑定对应的初始化函数
src->mt6580->kd_sensorlist.c -----camera驱动模块的加载,platform总线的注册
src->mt6580->xxx摄像头-----具体camera的驱动程序放置在这里
2、具体分析下kd_sensorlist.c文件和一个典型的camera驱动加载流程
//kd_sensorlist.c -----camera驱动模块的加载,platform总线的注册
//从后往前分析:
module_init(CAMERA_HW_i2C_init);
module_exit(CAMERA_HW_i2C_exit);
/*=======================================================================
* CAMERA_HW_i2C_init()
*=======================================================================*/
static int __init CAMERA_HW_i2C_init(void)
{
...
platform_device_register(&camerahw2_platform_device);
platform_driver_register(&g_stCAMERA_HW_Driver2)
proc_create("driver/camsensor", 0, NULL, &fcamera_proc_fops);//创建proc节点
...
}
static struct platform_driver g_stCAMERA_HW_Driver2 = {
.probe = CAMERA_HW_probe2,//device与driver的名字匹配到之后就会跑prob函数
.remove = CAMERA_HW_remove2,
.suspend = CAMERA_HW_suspend2,
.resume = CAMERA_HW_resume2,