mtk驱动安装_UBOOT下U盘驱动移植

mtk驱动安装_UBOOT下U盘驱动移植对于MTKCamera驱动移植一般分为四部分:1、硬件IO口配置;2、Camera驱动移植;3、上电时序;4、修改i2c控制器;硬件电路:1、GPIO配置打开 mediatek\dct\DrvGen.exe 选择mediatek\custom\xiaoxi\kernel\dct\dct\codegen.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

对于MTK Camera驱动移植一般分为四部分:

1、硬件IO口配置;

2、Camera驱动移植;

3、上电时序;

4、修改i2c控制器;

硬件电路:

mtk驱动安装_UBOOT下U盘驱动移植

1、GPIO配置

打开 mediatek\dct\DrvGen.exe 

选择 mediatek\custom\xiaoxi\kernel\dct\dct\codegen.dws 配置文件

mtk驱动安装_UBOOT下U盘驱动移植

设置前后摄像头的CMRST和CMPDN引脚,这是跟上电时序有关;

2、Camera驱动移植(以SP5507+SP2509为例)

(1)将kernel层代码整个目录sp5507_mipi_raw,sp2509_mipi_raw拷贝到mediatek/custom/common/kernel/imgsensor/目录下;
(2)将hal层代码整个目录sp5507_mipi_raw,sp2509_mipi_raw拷贝到mediatek/custom/common/hal/imgsensor/目录下;
         SP5507芯片与VO5670是用一款芯片,所以驱动程序也是同一套,上电时序也是一致;

mtk驱动安装_UBOOT下U盘驱动移植


(3)打开mediatek/custom/common/kernel/imgsensor/inc/kd_imgsensor.h文件, 定义sensor id和sensor name

#define SP5507MIPI_SENSOR_ID                    0x5670  
#define SENSOR_DRVNAME_SP5507MIPI_RAW           “sp5507_mipi_raw”

#define SP2509MIPI_SENSOR_ID                    0x2509
#define SENSOR_DRVNAME_SP2509MIPI_RAW           “sp2509_mipi_raw”

id和name的定义建议跟系统其它数据格式保持一致;

(4)在mediatek/custom/common/kernel/imgsensor/src/kd_sensorlist.h文件中声明初始化函数;

UINT32 SP5507_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);  //该函数为kernel中的初始化函数;

UINT32 SP2509_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);  //该函数为kernel中的初始化函数;

在kdSensorList数组中添加:

#if defined(SP5507_MIPI_RAW)    //该宏为驱动目录名大写
    {SP5507MIPI_SENSOR_ID, SENSOR_DRVNAME_SP5507MIPI_RAW, SP5507_MIPI_RAW_SensorInit},
#endif

#if defined(SP2509_MIPI_RAW)  //该宏为驱动目录名大写
    {SP2509MIPI_SENSOR_ID, SENSOR_DRVNAME_SP2509MIPI_RAW, SP2509_MIPI_RAW_SensorInit},
#endif


(5)在mediatek/custom/common/hal/imgsensor/src/sensorlist.cpp文件的SensorList数组中添加
#if defined(SP5507_MIPI_RAW)
    RAW_INFO(SP5507MIPI_SENSOR_ID, SENSOR_DRVNAME_SP5507MIPI_RAW, NULL),
#endif

#if defined(SP2509_MIPI_RAW)
    RAW_INFO(SP2509MIPI_SENSOR_ID, SENSOR_DRVNAME_SP2509MIPI_RAW, NULL),
#endif

代码位置要跟kdSensorList数组中的位置保持一致;

(6) 修改mediatek/config/pro/ProjectConfig.mk配置文件
CUSTOM_HAL_IMGSENSOR=sp5507_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR=sp5507_mipi_raw  //后摄像头
CUSTOM_HAL_SUB_IMGSENSOR=sp2509_mipi_raw   //前摄像头
 
CUSTOM_KERNEL_IMGSENSOR=sp5507_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR =sp5507_mipi_raw  //后摄像头
CUSTOM_KERNEL_SUB_IMGSENSOR=sp2509_mipi_raw  //前摄像头

(7)驱动文件的修改

修改kernel层中的XXXXmipiraw_Sensor.h文件中的Sensor ID宏为kd_imgsensor.h中定义的Sensor ID宏:

#define OV5670_SENSOR_ID  SP5507MIPI_SENSOR_ID 

与供应商确认i2c读写地址;

再修改hal层中的camera_info_XXXXmipiraw.h中的SENSOR_ID和SENSOR_DRVNAME为kd_imgsensor.h中定义的宏,修改config.ftbl.XXXX_mipi_raw.h中的FTABLE_DEFINITION(SENSOR_DRVNAME_XXXX_MIPI_RAW)的SENSOR_DRVNAME为kd_imgsensor.h中定义的sensor name宏;

(8)修改上电时序

打开mediatek\custom\pro\kernel\camera\camera\kd_camera_hw.c文件

修改kdCISModulePowerOn()函数;

SP5507上电时序

mtk驱动安装_UBOOT下U盘驱动移植

SP2509上电时序

mtk驱动安装_UBOOT下U盘驱动移植

int kdCISModulePowerOn(CAMERA_DUAL_CAMERA_SENSOR_ENUM SensorIdx, char *currSensorName, BOOL On, char* mode_name)
{
	u32 pinSetIdx = 0;//default main sensor

#define IDX_PS_CMRST 0    //RST索引
#define IDX_PS_CMPDN 4    //PDN索引

#define IDX_PS_MODE 1
#define IDX_PS_ON   2
#define IDX_PS_OFF  3

	u32 pinSet[2][8] = 
	{
		//for main sensor   //后摄像头
		{
			GPIO_CAMERA_CMRST_PIN,
			GPIO_CAMERA_CMRST_PIN_M_GPIO,   /* mode */
			GPIO_OUT_ONE,                   /* ON state */
			GPIO_OUT_ZERO,                  /* OFF state */
			GPIO_CAMERA_CMPDN_PIN,
			GPIO_CAMERA_CMPDN_PIN_M_GPIO,
			GPIO_OUT_ONE, 
			GPIO_OUT_ZERO,
		},
		//for sub sensor   //前摄像头
		{
			GPIO_CAMERA_CMRST1_PIN,   //RST引脚
			GPIO_CAMERA_CMRST1_PIN_M_GPIO,
			GPIO_OUT_ONE,    //上电电平
			GPIO_OUT_ZERO,   //下电电平
			GPIO_CAMERA_CMPDN1_PIN,  //PDN引脚
			GPIO_CAMERA_CMPDN1_PIN_M_GPIO, 
			GPIO_OUT_ONE,    //上电电平
			GPIO_OUT_ZERO,   //下电电平
		}
	};


	if (DUAL_CAMERA_MAIN_SENSOR == SensorIdx){
		pinSetIdx = 0;
		searchMainSensor = KAL_TRUE;
	}
	else if (DUAL_CAMERA_SUB_SENSOR == SensorIdx) {
		pinSetIdx = 1;
		searchMainSensor = KAL_FALSE;
	}

	PK_DBG("[kdCISModulePowerOn]:pinSetIdx=%d\n",pinSetIdx);

	//power ON
	if (On)   //上电时序
	{
		PK_DBG("kdCISModulePowerOn -on:currSensorName=%s\n",currSensorName);

		if (currSensorName && ((0 == strcmp(SENSOR_DRVNAME_SP2509MIPI_RAW,currSensorName))))
		{
			{
				PK_DBG("kdCISModulePowerOn get in---  %s \n",currSensorName);
				PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx);
				/* SP2509只有两个电源 */						
				if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))  //VCAM_IO  先打开DVDDIO电源
				{
					PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
					//return -EIO;
					goto _kdCISModulePowerOn_exit_;
				}			
				mdelay(1);
				
				if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name))  //再打开AVDD电源
				{
					PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
					//return -EIO;
					goto _kdCISModulePowerOn_exit_;
				}			
				mdelay(1);
	
				if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST])
				{										
					/* RST和PDN先置为低电平 */	
					//PDN/STBY pin   
					if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
					if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
					if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
					//RST pin
					if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
					if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
					if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
					mdelay(1);
					
					//PDN/STBY pin   //PWD高电平脉冲 持续10ms
					if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
					mdelay(10);	
					if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
					mdelay(10);	
					
					//RST pin   //然后RST置高电平
					if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
					mdelay(10);	//
				}

				//disable inactive sensor   //关闭不使用的摄像头
				if(pinSetIdx == 0 ) {//disable sub
					if (GPIO_CAMERA_INVALID != pinSet[1][IDX_PS_CMRST]) {
						if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
						if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
						if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
						if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
						if(mt_set_gpio_out(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
						if(mt_set_gpio_out(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
					}
				}
				else {
					if (GPIO_CAMERA_INVALID != pinSet[0][IDX_PS_CMRST]) {
						if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
						if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
						if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
						if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
						if(mt_set_gpio_out(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
						if(mt_set_gpio_out(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
					}
				}

				mdelay(50);
			}
		}
		else if (currSensorName && ((0 == strcmp(SENSOR_DRVNAME_SP5507MIPI_RAW,currSensorName))))
		{
			{
				PK_DBG("kdCISModulePowerOn get in---  %s \n",currSensorName);
				PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx);
				/* SP5507有三个电源 */							
				if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))  //VCAM_IO  先打开DOVDD电源
				{
					PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
					//return -EIO;
					goto _kdCISModulePowerOn_exit_;
				}			
				
				if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name))  //再打开AVDD电源
				{
					PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
					//return -EIO;
					goto _kdCISModulePowerOn_exit_;
				}			
				
				if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1200,mode_name))   //最后打开DVDD电源
				{
					PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
					//return -EIO;
					goto _kdCISModulePowerOn_exit_;
				}			
				mdelay(1);
	
				if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST])
				{	
					/* 先把RET(SHUTDOWN)和PWDN置为低电平 */										
					//PDN/STBY pin
					if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
					if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
					if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
					//RST pin
					if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
					if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
					if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
					mdelay(1);
										
					//RST pin  
					if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
					mdelay(2);		
					
					//PDN/STBY pin
					if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
					mdelay(20);	
				}

				//disable inactive sensor  //关闭其他摄像头
				if(pinSetIdx == 0 ) {//disable sub
					if (GPIO_CAMERA_INVALID != pinSet[1][IDX_PS_CMRST]) {
						if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
						if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
						if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
						if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
						if(mt_set_gpio_out(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
						if(mt_set_gpio_out(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
					}
				}
				else {
					if (GPIO_CAMERA_INVALID != pinSet[0][IDX_PS_CMRST]) {
						if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
						if(mt_set_gpio_mode(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
						if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
						if(mt_set_gpio_dir(pinSet[0][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
						if(mt_set_gpio_out(pinSet[0][IDX_PS_CMRST],pinSet[0][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
						if(mt_set_gpio_out(pinSet[0][IDX_PS_CMPDN],pinSet[0][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
					}
				}

				mdelay(50);
			}
		}
	}
	//power OFF
	else    //下电时序
	{
		PK_DBG("kdCISModulePowerOn -off:currSensorName=%s\n",currSensorName);

		if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_SP2509MIPI_RAW, currSensorName)))
		{
			PK_DBG("kdCISModulePowerOff, get in---SENSOR_DRVNAME_IMX219_MIPI_RAW \n");

			if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {
				//RST pin
				if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
				if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
				if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
				mdelay(1);
				//PDN/STBY pin
				if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
				if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
				if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
				mdelay(1);		
			}

			if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
				PK_DBG("[CAMERA SENSOR] Fail to OFF analog power:VCAM_A:VOL_2800\n");
				//return -EIO;
				goto _kdCISModulePowerOn_exit_;
			}
			
			if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2, mode_name)) {
				PK_DBG("[CAMERA SENSOR] Fail to OFF digital power:VCAM_D:VOL_1200\n");
				//return -EIO;
				goto _kdCISModulePowerOn_exit_;
			}
			
			mdelay(1);	
				
      //PDN pull down
      if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMPDN]) {
        if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
				if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
				if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
				mdelay(1);
      }    
		} 
		else if (currSensorName && (0 == strcmp(SENSOR_DRVNAME_SP5507MIPI_RAW, currSensorName)))
		{
			PK_DBG("kdCISModulePowerOff, get in---SENSOR_DRVNAME_IMX219_MIPI_RAW \n");

			if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST]) {
				//RST pin
				if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
				if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
				if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
				mdelay(2);
				//PDN/STBY pin
				if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
				if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
				if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
				mdelay(1);		
			}
			
			if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D, mode_name)) {
				PK_DBG("[CAMERA SENSOR] Fail to OFF digital power:VCAM_D:VOL_1200\n");
				//return -EIO;
				goto _kdCISModulePowerOn_exit_;
			}		
			
			if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_A,mode_name)) {
				PK_DBG("[CAMERA SENSOR] Fail to OFF analog power:VCAM_A:VOL_2800\n");
				//return -EIO;
				goto _kdCISModulePowerOn_exit_;
			}
			
			if(TRUE != hwPowerDown(CAMERA_POWER_VCAM_D2, mode_name)) {
				PK_DBG("[CAMERA SENSOR] Fail to OFF digital power:VCAM_D:VOL_1200\n");
				//return -EIO;
				goto _kdCISModulePowerOn_exit_;
			}		
			mdelay(1);		   
		} 
  }

	return 0;

_kdCISModulePowerOn_exit_:
    return -EIO;
}

Jetbrains全家桶1年46,售后保障稳定


根据芯片的上电时序图把大致的上电时序设置好就可以使摄像头工作起来;这里的上电时序没有像协议时序那般严格,只需要大致配置好就可以了;

4、修改i2c控制器


打开mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.c,修改 i2c_register_board_info(SUPPORT_I2C_BUS_NUM, &i2c_devs, 1);中的SUPPORT_I2C_BUS_NUM设置为实际电路使用的i2c控制器

如果开机后,相机无法起来,那就应该查看系统log,判断是否能够获取到Camera的ID,硬件上必须保证I2C能够正常通信;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213484.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • alibaba String转json转map

    alibaba String转json转mapalibabaString转json转mappom <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>调用HashMaphash

    2022年5月13日
    33
  • 2021-07-22MATLAB基于元胞自动机模型的传染病扩散模型

    2021-07-22MATLAB基于元胞自动机模型的传染病扩散模型MATLAB 基于元胞自动机模型的传染病扩散模型基本思路 地图矩阵可以分为两类 一类是健康人矩阵 一类是感染者矩阵 健康人感染后则落入感染者矩阵 感染者康复后则升上健康人矩阵通过建立三维矩阵 Track 在 x 轴和 y 轴之上加入时间轴形成三维 来追踪已感染的人的感染时间 从而判定康复 通过设置 NewMap 和 NewPatientMa 两个过渡矩阵来更新每次的随机移动 防止先更新的人在遍历过程中再次被选中导致一个回合内多次移动 将地图分为两种 一种是健康人地图 一种是病人地图 多个人可以在同一个点

    2025年11月5日
    4
  • ConstraintLayout 下 layout_marginLeft 属性无效问题[通俗易懂]

    ConstraintLayout 下 layout_marginLeft 属性无效问题[通俗易懂]ConstraintLayout下layout_marginLeft属性无效问题需要添加app:layout_constraintLeft_toLeftOf="parent&quo

    2022年7月2日
    58
  • oracle数据库心得体会_oracle基础知识入门

    oracle数据库心得体会_oracle基础知识入门Oracle的体系太庞大了,对于初学者来说,难免会有些无从下手的感觉,什么都想学,结果什么都学不好,所以把学习经验共享一下,希望让刚刚入门的人对oracle有一个总体的认识,少走一些弯路。  一、定位  oracle分两大块,一块是开发,一块是管理。开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具做form。有点类似于程序员,需要有较强的逻辑思维和创造能力,

    2022年8月30日
    2
  • 软件测试用例的设计方法_设计测试用例的依据

    软件测试用例的设计方法_设计测试用例的依据测试用例设计方法,等价类划分法,边界值分析法,错误推测法,因果图法,判定表驱动法,三角形问题用例设计

    2022年10月10日
    5
  • Win 10 专业版重新激活详细操作步骤

    Win 10 专业版重新激活详细操作步骤百度经验:jingyan.baidu.com最近电脑的win10系统显示显示未激活,需要激活,用命令提示符运行slmgr.vbs-xpr查询到期状态显示处于统治状态KMS10方法/步骤1,首先,找到计算机,右键点击属性,确认你的电脑系统是否是windows10专业版(由于小编安装的是windows10专业版,所以今天就说win10专业版的激活方式),如下图所示。2,如果有朋友找不…

    2022年5月29日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号