Chinaunix首页 | 论坛 | 博客
  • 博客访问: 392513
  • 博文数量: 200
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-07 12:12
文章分类

全部博文(200)

文章存档

2015年(2)

2013年(198)

分类: LINUX

2013-04-12 10:08:02

原文地址:Camera driver porting 作者:rain0993

近来刚接手项目的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。

阅读(1249) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~