全志A31下5M的CMOSCamera移植修改记录表

最近一段时间都在用A31评估几颗5M的摄像头,包括ov5640、MT9P001、ov2710。A31下移植不同的摄像头驱动的好处在于,驱动结构规范化,采用video_device下的suddev的架构方式来处理sensor。A31下的移植主要关注几个配置文件+对硬件驱动的初始化配置即可。调试的目的是先跑起来后优化。

以下面的COMS为列,我们需要主要摄像头的以下几个电压值:
典型5M摄像头的芯片电压配置

摄像头型号 I2C地址 AVDD DVDD IODD Reset PWDN
三星S5k4ec 0x5a 2.8V 1.5V 2.8V    
MT9P001 2.8V 1.8V 2.8V 2.8V 2.8V
OV5640 0x78 2.8V 1.5V 2.8V 2.8V 2.8V
OV2710 3.3V 1.5V 1.8V 1.5V


对于配置文件需要关注sys_config.fex与init.sun6i.rc文件。以及对应的驱动文件。

1. 对于sys_config.fex,从硬件上要关注的是摄像头的输出、core电压。

输出数据fmt指的是Raw Bayer data还是YUV data.这个决定了配置sys_config.fex是使用A31的ISP还是Sensor自带了ISP。比如:

01.vip_dev0_mname           = "ov2710"
02.vip_dev0_twi_id          = 0
03.vip_dev0_twi_addr        = 0x6c
04.vip_dev0_isp_used        = 1
05.vip_dev0_fmt             = 1
06.vip_dev0_stby_mode       = 0
07.vip_dev0_vflip           = 0
08.vip_dev0_hflip           = 1
09.vip_dev0_iovdd           = "axp22_dldo3"
10.vip_dev0_iovdd_vol       = 2800000
11.vip_dev0_avdd            = "axp22_ldoio0"
12.vip_dev0_avdd_vol        = 2800000
13.vip_dev0_dvdd            = "axp22_eldo1"
14.vip_dev0_dvdd_vol        = 1800000
15.vip_dev0_afvdd           = ""
16.vip_dev0_afvdd_vol       = 2800000

还有一个是camera_list_para,主要用于驱动加载时的自检测使用,说明当前对应的摄像头是要被自检测的:

01.[camera_list_para]
02.camera_list_para_used   = 1
03.ov7670                  = 0
04.gc0308                  = 0
05.gt2005                  = 0
06.hi704                   = 0
07.sp0838                  = 0
08.mt9p001                 = 0
09.mt9m113                 = 0
10.gc2035                  = 0
11.ov2655                  = 0
12.hi253                   = 0
13.gc0307                  = 0
14.mt9d112                 = 0
15.ov5640                  = 0
16.ov5647                  = 0
17.gc2015                  = 0
18.ov2643                  = 0
19.gc0329                  = 0
20.gc0309                  = 0
21.tvp5150                 = 0
22.s5k4ec                  = 0
23.ov5650_mv9335           = 0
24.siv121d                 = 0
25.ov2710                  = 1

2、

完成了基础的配置文件后(主要给A31的VFE使用),剩余驱动文件

这里包括sensor的驱动和cam_detect的驱动(添加对应的detect源码,更新camera_list)

01.__camera_list_t camera_list[MAX_CAMERA_LIST_ITEM] = {
02.CAMERA_LIST_ITEM_INIT(ov7670,        110x42100110),
03.CAMERA_LIST_ITEM_INIT(gc2035,        110x78100110),
04.CAMERA_LIST_ITEM_INIT(gc0308,        110x42100110),
05.CAMERA_LIST_ITEM_INIT(gt2005,        210x78010110),
06.CAMERA_LIST_ITEM_INIT(hi704,         110x60100110),
07.CAMERA_LIST_ITEM_INIT(sp0838,        110x30100110),
08.CAMERA_LIST_ITEM_INIT(mt9m112,       120xba100110),
09.CAMERA_LIST_ITEM_INIT(mt9m113,       220x78100110),
10.CAMERA_LIST_ITEM_INIT(ov2655,        210x60100110),
11.CAMERA_LIST_ITEM_INIT(hi253,         110x40100110),
12.CAMERA_LIST_ITEM_INIT(gc0307,        110x42100110),
13..........
14.};

3.修改init.sun6i.rc,添加insmod 加载ko驱动文件:

1.#add mt9p001/ov2710 camera
2.insmod /system/vendor/modules/mt9p001.ko
3.insmod /system/vendor/modules/ov5640.ko
4.insmod /system/vendor/modules/ov2710.ko
5.insmod /system/vendor/modules/s5k4ec.ko
6.insmod /system/vendor/modules/vfe_v4l2.ko


4.考虑摄像头是内置VCM还是外控VCM

一般sensor有ISP的话,支持3A就一般会是集成了内置vcm.直接由sensor来控制vcm.

而外控是指的处理器经过3A后,负责都sensor的VCM进行控制,而这些sensor不带ISP。

基本上对sensor的移植就是对以上内容的修改、配置、编码就是这些内容。

没有更多推荐了,返回首页