首页 > 代码库 > 全志A31下CMOSCamera移植修改记录表

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

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

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

摄像头型号      I2C地址AVDDDVDDIODDResetPWDN    
三星S5k4ec        0x5a2.8V1.5V2.8V  
MT9P001             2.8V1.8V2.8V2.8V2.8V
OV5640              0x782.8V1.5V2.8V2.8V2.8V
OV27103.3V1.5V1.8V1.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。比如:

vip_dev0_mname           = "ov2710"
vip_dev0_twi_id          = 0
vip_dev0_twi_addr        = 0x6c
vip_dev0_isp_used        = 1
vip_dev0_fmt             = 1
vip_dev0_stby_mode       = 0
vip_dev0_vflip           = 0
vip_dev0_hflip           = 1
vip_dev0_iovdd           = "axp22_dldo3"
vip_dev0_iovdd_vol       = 2800000
vip_dev0_avdd            = "axp22_ldoio0"
vip_dev0_avdd_vol        = 2800000
vip_dev0_dvdd            = "axp22_eldo1"
vip_dev0_dvdd_vol        = 1800000
vip_dev0_afvdd           = ""
vip_dev0_afvdd_vol       = 2800000

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

[camera_list_para]
camera_list_para_used   = 1
ov7670                  = 0
gc0308                  = 0
gt2005                  = 0
hi704                   = 0
sp0838                  = 0
mt9p001                 = 0
mt9m113                 = 0
gc2035                  = 0
ov2655                  = 0
hi253                   = 0
gc0307                  = 0
mt9d112                 = 0
ov5640                  = 0
ov5647                  = 0
gc2015                  = 0
ov2643                  = 0
gc0329                  = 0
gc0309                  = 0
tvp5150                 = 0
s5k4ec                  = 0
ov5650_mv9335           = 0
siv121d                 = 0
ov2710                  = 1

 

2、

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

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

__camera_list_t camera_list[MAX_CAMERA_LIST_ITEM] = {
    CAMERA_LIST_ITEM_INIT(ov7670,        1, 1, 0x42, 1, 0, 0, 1, 1, 0),
    CAMERA_LIST_ITEM_INIT(gc2035,        1, 1, 0x78, 1, 0, 0, 1, 1, 0),
    CAMERA_LIST_ITEM_INIT(gc0308,        1, 1, 0x42, 1, 0, 0, 1, 1, 0), 
    CAMERA_LIST_ITEM_INIT(gt2005,        2, 1, 0x78, 0, 1, 0, 1, 1, 0),
    CAMERA_LIST_ITEM_INIT(hi704,         1, 1, 0x60, 1, 0, 0, 1, 1, 0),
    CAMERA_LIST_ITEM_INIT(sp0838,        1, 1, 0x30, 1, 0, 0, 1, 1, 0),
    CAMERA_LIST_ITEM_INIT(mt9m112,       1, 2, 0xba, 1, 0, 0, 1, 1, 0),
    CAMERA_LIST_ITEM_INIT(mt9m113,       2, 2, 0x78, 1, 0, 0, 1, 1, 0),
    CAMERA_LIST_ITEM_INIT(ov2655,        2, 1, 0x60, 1, 0, 0, 1, 1, 0),
    CAMERA_LIST_ITEM_INIT(hi253,         1, 1, 0x40, 1, 0, 0, 1, 1, 0),
    CAMERA_LIST_ITEM_INIT(gc0307,        1, 1, 0x42, 1, 0, 0, 1, 1, 0),
.........
};

 

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

#add mt9p001/ov2710 camera
	insmod /system/vendor/modules/mt9p001.ko
	insmod /system/vendor/modules/ov5640.ko
	insmod /system/vendor/modules/ov2710.ko
	insmod /system/vendor/modules/s5k4ec.ko
	insmod /system/vendor/modules/vfe_v4l2.ko

 


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

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

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

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

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