MTK移植camera说明
1、 裁剪模块
修改文件:config/tf902/ProjectConfig.mk Eg\\
config/tf902/ProjectConfig.mk
```````````````````````````````````````````` CUSTOM_HAL_EEPROM = dummy_eeprom
CUSTOM_HAL_FLASHLIGHT = constant_flashlight CUSTOM_HAL_FMRADIO = mt6628
-CUSTOM_HAL_IMGSENSOR = ov8825_mipi_raw s5k8aayx_mipi_yuv
+CUSTOM_HAL_IMGSENSOR = gc2235mipi_raw gc0313mipi_yuv#ov8825_mipi_raw s5k8aayx_mipi_yuv#添加摄像头模块,定义hal层 CUSTOM_HAL_LENS = ov8825af dummy_lens CUSTOM_HAL_MAIN2_IMGSENSOR = CUSTOM_HAL_MAIN_BACKUP_IMGSENSOR = CUSTOM_HAL_MAIN_BACKUP_LENS = dummy_lens -CUSTOM_HAL_MAIN_IMGSENSOR = ov8825_mipi_raw
+CUSTOM_HAL_MAIN_IMGSENSOR = gc2235mipi_raw #ov8825_mipi_raw#主摄像头在hal层的修改
CUSTOM_HAL_MAIN_LENS = ov8825af
CUSTOM_HAL_MSENSORLIB = mmc328x akm8975 ami304 yamaha530 mag3110 akmd8963 bmm050
CUSTOM_HAL_SENSORS = sensor
CUSTOM_HAL_SUB_BACKUP_IMGSENSOR = CUSTOM_HAL_SUB_BACKUP_LENS = dummy_lens -CUSTOM_HAL_SUB_IMGSENSOR = s5k8aayx_mipi_yuv
+CUSTOM_HAL_SUB_IMGSENSOR = gc0313mipi_yuv #s5k8aayx_mipi_yuv #副摄像头在hal层的定义
CUSTOM_HAL_SUB_LENS = dummy_lens CUSTOM_KERNEL_ACCELEROMETER = bma050 CUSTOM_KERNEL_ALSPS = cm36283
@@ -79,7+79,7 @@ CUSTOM_KERNEL_FLASHLIGHT = constant_flashlight CUSTOM_KERNEL_FM = mt6628 CUSTOM_KERNEL_HDMI =
CUSTOM_KERNEL_HEADSET = accdet
-CUSTOM_KERNEL_IMGSENSOR = ov8825_mipi_raw s5k8aayx_mipi_yuv
+CUSTOM_KERNEL_IMGSENSOR = gc2235mipi_raw gc0313mipi_yuv#ov8825_mipi_raw s5k8aayx_mipi_yuv#添加摄像头在kernal模块
CUSTOM_KERNEL_KPD = kpd
CUSTOM_KERNEL_LCM = bi097xn02_xga_dpi CUSTOM_KERNEL_LEDS = mt65xx
+CUSTOM_KERNEL_MAIN_IMGSENSOR = gc2235mipi_raw #ov8825_mipi_raw#在底层定义主摄像头
CUSTOM_KERNEL_MAIN_LENS = ov8825af CUSTOM_KERNEL_RTC = rtc
CUSTOM_KERNEL_SOUND = amp_6320pmic_spk CUSTOM_KERNEL_SSW = ssw_generic CUSTOM_KERNEL_SUB_BACKUP_IMGSENSOR = CUSTOM_KERNEL_SUB_BACKUP_LENS = dummy_lens -CUSTOM_KERNEL_SUB_IMGSENSOR = s5k8aayx_mipi_yuv
+CUSTOM_KERNEL_SUB_IMGSENSOR = gc0313mipi_yuv#s5k8aayx_mipi_yuv#在底层定义副摄像头
CUSTOM_KERNEL_SUB_LENS = dummy_lens
CUSTOM_KERNEL_TOUCHPANEL = GT82X #cy8ctma300 GT818B-fpga CUSTOM_KERNEL_USB = mt6577
上面的修改是在平台没有默认AF(自动对焦)的功能(mtk6517和mtk6577\\mtk6572的平台没有默认AF功能),mtk6589的平台默认就支持AF功能。如果移植的摄像头没有AF功能就必须将默认的AF功能屏蔽掉(否则在DMA操作数据的时候很多的算法受影响,将在切换的时候很卡)!
在没有AF功能,就将全部设置成dummy_lens。ov8825af 指的是自动对焦功能。
config/tf902/ProjectConfig.mk
························· CUSTOM_HAL_EEPROM = dummy_eeprom
CUSTOM_HAL_FLASHLIGHT = constant_flashlight CUSTOM_HAL_FMRADIO = mt6628
CUSTOM_HAL_IMGSENSOR = gc2235mipi_raw gc0313mipi_yuv#ov8825_mipi_raw s5k8aayx_mipi_yuv
-CUSTOM_HAL_LENS = ov8825af dummy_lens
+CUSTOM_HAL_LENS = dummy_lens #ov8825af#hal层的副摄像头自动对焦设置 CUSTOM_HAL_MAIN2_IMGSENSOR = CUSTOM_HAL_MAIN_BACKUP_IMGSENSOR = CUSTOM_HAL_MAIN_BACKUP_LENS = dummy_lens
CUSTOM_HAL_MAIN_IMGSENSOR = gc2235mipi_raw #ov8825_mipi_raw -CUSTOM_HAL_MAIN_LENS = ov8825af
+CUSTOM_HAL_MAIN_LENS =dummy_lens # ov8825af#hal层主摄像头的自动对焦功能 CUSTOM_HAL_MSENSORLIB = mmc328x akm8975 ami304 yamaha530 mag3110 akmd8963 bmm050
CUSTOM_HAL_SENSORS = sensor
CUSTOM_HAL_SUB_BACKUP_IMGSENSOR =
··························
CUSTOM_KERNEL_IMGSENSOR = gc2235mipi_raw gc0313mipi_yuv#ov8825_mipi_raw s5k8aayx
CUSTOM_KERNEL_KPD = kpd
CUSTOM_KERNEL_LCM = bi097xn02_xga_dpi CUSTOM_KERNEL_LEDS = mt65xx
-CUSTOM_KERNEL_LENS = ov8825af dummy_lens
+CUSTOM_KERNEL_LENS = dummy_lens #ov8825af#KERNEL中副摄像头的自动对焦功能 CUSTOM_KERNEL_MAGNETOMETER =
CUSTOM_KERNEL_MAIN2_BACKUP_IMGSENSOR = CUSTOM_KERNEL_MAIN2_IMGSENSOR = CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR = CUSTOM_KERNEL_MAIN_BACKUP_LENS = dummy_lens
CUSTOM_KERNEL_MAIN_IMGSENSOR = gc2235mipi_raw #ov8825_mipi_raw -CUSTOM_KERNEL_MAIN_LENS = ov8825af
+CUSTOM_KERNEL_MAIN_LENS = dummy_lens #ov8825af #KERNEL中主摄像头的自动对焦功能 CUSTOM_KERNEL_RTC = rtc
2、 将custom/common/hal/imgsensor/中添加相应模块的hal层代码
在custom/common/kernel/imgsensor/中添加相应模块的Kernal层的代码 3、 SensorList[]的数据通过宏定义的判断,查看目前可能的摄像头的数量。同时框架层也是通过这个
变量来获取摄像头的数量。 custom/common/hal/imgsensor/src/sensorlist.cpp
·········································· MSDK_SENSOR_INIT_FUNCTION_STRUCT SensorList[] =
RAW_INFO(IMX073_SENSOR_ID, SENSOR_DRVNAME_IMX073_MIPI_RAW,CAM_CALGetCalData), #endif
+#if defined(GC2235MIPI_RAW)
+ RAW_INFO(GC2235MIPI_SENSOR_ID, SENSOR_DRVNAME_GC2235MIPI_RAW, NULL), +#endif +
+#if defined(GC0313MIPI_YUV)
+ RAW_INFO(GC0313MIPI_SENSOR_ID, SENSOR_DRVNAME_GC0313MIPI_YUV, NULL), +#endif +
#if defined(OV8825_MIPI_RAW)
RAW_INFO(OV8825_SENSOR_ID, SENSOR_DRVNAME_OV8825_MIPI_RAW,CAM_CALGetCalData), #endif
4、 custom/common/kernel/imgsensor/inc/kd_imgsensor.h定义设备ID,定义一个摄像头的
名字,这个名字对移植的成功与否问题不大 custom/common/kernel/imgsensor/inc/kd_imgsensor.h
······································· #define OV8830_SENSOR_ID 0x8830 #define OV9726_SENSOR_ID 0x9726 #define A5141MIPI_SENSOR_ID 0x4800 -
+#define GC2235MIPI_SENSOR_ID 0X2235 +#define GC0313MIPI_SENSOR_ID 0XD0 /* CAMERA DRIVER NAME */
#define CAMERA_HW_DEVNAME \
······································· #define SENSOR_DRVNAME_HI542_RAW \
#define SENSOR_DRVNAME_HI542MIPI_RAW \
+#define SENSOR_DRVNAME_GC2235MIPI_RAW \+#define SENSOR_DRVNAME_GC0313MIPI_YUV \+
#define SENSOR_DRVNAME_OV5647MIPI_RAW \ #define SENSOR_DRVNAME_HM3451_RAW \
5、 为系统提供驱动调用的接口
其中必须注意上下的顺序必须一致!
custom/common/kernel/imgsensor/src/kd_sensorlist.h @@ -53,7+53,8
@@ UINT32 OV12830_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc); UINT32 S5K3H7Y_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc); UINT32 S5K8AAYX_MIPI_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc); UINT32 OV9740_MIPI_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc); -
//一定要注意下面定义时要和硬件的数据格式匹配
+UINT32 GC0313MIPI_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc); +UINT32 GC2235MIPISensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc); //! Add Sensor Init function here //! Note:
//! 1. Add by the resolution from \@@ -62,6+63,13
@@ UINT32 OV9740_MIPI_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc); //! 2. This file should be the same as mediatek\\custom\\common\\hal\\imgsensor\\src\\sensorlist.cpp
ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1] = {
//和上面定义顺序一致
+#if defined(GC2235MIPI_RAW)
+ {GC2235MIPI_SENSOR_ID, SENSOR_DRVNAME_GC2235MIPI_RAW, GC2235MIPISensorInit}, +#endif +
+#if defined(GC0313MIPI_YUV)
+ {GC0313MIPI_SENSOR_ID, SENSOR_DRVNAME_GC0313MIPI_YUV, GC0313MIPI_YUV_SensorInit}, +#endif
#if defined(OV8830_RAW)
{OV8830_SENSOR_ID, SENSOR_DRVNAME_OV8830_RAW, OV8830SensorInit}, #endif
6、 修改电源
参考datasheet上的时序。注意顺序,注意电源的大小,注意要关闭电源,注意时序。 7、 配置GPIO口
数据口和时钟口通常采用默认;
电源引脚在代码里面进行设置,不需要直接配置。 8、 9、