高通平台camera调试

今后会调一些sensor,故转载过来学习。近来刚接手项目的camera驱动,除了查看平台文档和sensor的到规格书,也在网上查看了高手们到经验。本人对camera还是比较陌生的,奈何公司无人过问,只好按部就班的来吧! 和大部分驱动的调试相差无几,还是在前人的工作基础上进行的。项目采用高通7627平台,sensor采用ov7675。驱动移植1.内核驱动移植sensor信息记录在android\kernel\arch\arm\mach-msm\board-msm7x27.c文件中,board file中要更改的信息如下:(1)为sensor添加相应的i2c驱动,加到i2c_devices[]数组中,这里是使用i2c总线的设备数组。机器启动时会注册相应设备。static struct i2c_board_info i2c_devices[] = {#ifdef CONFIG_MT9D112{I2C_BOARD_INFO("mt9d112", 0x60 >> 1),//这是7bit形式,采用硬件I2C,把真实的读或写地址右移一位即可},#endif......}(2)msm_camera_sensor_info包含了设备启动信息。添加一个新的sensor驱动,就必须填写这样的一个结构体,包括sensor所使用的GPIO口。结构体中的sensor name将被用作driver id。static struct msm_camera_sensor_info msm_camera_sensor_mt9d112_data = {.sensor_name = "mt9d112", //将被用作driver id.sensor_reset = 1, //sensor reset GPIO.sensor_pwd = 20, //电源开关.vcm_pwd = 0, //用作自动对焦。0表示不使用。.vcm_enable = 0,.pdata = &msm_camera_device_data,.flash_data = &flash_mt9d112};另外还要把sensor注册成platform_device。(3)修改i2c地址。gpio表修改,使用8线输入。修改camera_on_gpio_table[]和camera_off_gpio_table[]两个数组。由于平台采用的是双核架构,在功能上有所区分,个别GPIO需要在modem那边配置成app这边控制。(4)创建自己的驱动文件。使用YUV sensor则查看android\kernel\drivers\media\video\msm\mt9d112.c,若使用bayer sensor则查看android\kernel\drivers\media\video\msm\mt9t013.c。这里不作详细说明。(5)完成上述工作后,修改Kconfig和Makefile文件。2.用户空间驱动(1)用户空间驱动主要在vendor目录下,把自己的sensor加到sensors[]中,以便启动自己的senor。static sensor_proc_start_t sensors[] = {SENSORS_PROCCESS_START(mt9d112),......};(2)修改sensor相关参数:例如sensor类型,sensor输出格式,输出图像大小等等。\android\vendor\qcom- proprietary\mm-camera\targets\tgtcommon\sensor\mt9d112\mt9d112.c,这些参数必须得到正确的修改,否则sensor将启动不了。(3)mt9d112_process_start函数中为VFE具体配置一些参数。(4)mt9d112_video_config函数做了一些IO configuration调研,和内核mt9d112_set_sensor_mode是相关联的。通过IOCTL调用,相应的寄存器值会通过i2c总线写入sensor。写入sensor寄存器的值(mt9d112_set_sensor_mode)必须和vfe_camif配置的值(mt9d112_video_config)相匹配,如果使用YUVsensor,需将每行像素值定义为预览模式下 的两倍。其他重要的部分还包括HAL层的配置vendor/qcom/android-open/libcamera2\QualcommCameraHardware.cpp, android\packages\apps\Camera\res\layout\camera.xml。

你可能感兴趣的:(android,struct,video,table,平台,makefile)