微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RK29 Camare移植--内核部分

1。首先在初始化进程的加载:

static struct platform_device *devices[] __initdata = {
#ifdef CONfig_VIDEO_RK29
 	&rk29_device_camera,/* ddl@rock-chips.com : camera support  */
 	#if (CONfig_SENSOR_IIC_ADDR_0 != 0x00)
 	&rk29_soc_camera_pdrv_0,#endif
	#if (CONfig_SENSOR_IIC_ADDR_1 != 0x00)
 	&rk29_soc_camera_pdrv_1,#endif
	#if (PMEM_CAM_SIZE > 0)
 	&android_pmem_cam_device,#endif
#endif
}

1.1最大支持6个摄像头,其中前置3个,后置3个,后置分别是。00,01,02.前置为1,11,12如下所示:
#ifdef CONfig_VIDEO_RK29
/*---------------- Camera Sensor Macro Define Begin  ------------------------*/
/*---------------- Camera Sensor Configuration Macro Begin ------------------------*/
#define CONfig_SENSOR_0 RK29_CAM_SENSOR_GC2015                      /* back camera sensor */ //后置0号摄像头
#define CONfig_SENSOR_IIC_ADDR_0 	    0x60
#define CONfig_SENSOR_IIC_ADAPTER_ID_0    1
#define CONfig_SENSOR_ORIENTATION_0       90
#define CONfig_SENSOR_POWER_PIN_0         RK29_PIN5_PC3
#define CONfig_SENSOR_RESET_PIN_0         RK29_PIN6_PA5
#define CONfig_SENSOR_POWERDN_PIN_0       RK29_PIN0_PB2
#define CONfig_SENSOR_FALSH_PIN_0         INVALID_GPIO
#define CONfig_SENSOR_POWERACTIVE_LEVEL_0 RK29_CAM_POWERACTIVE_H
#define CONfig_SENSOR_RESETACTIVE_LEVEL_0 RK29_CAM_RESETACTIVE_L
#define CONfig_SENSOR_POWERDNACTIVE_LEVEL_0 RK29_CAM_POWERDNACTIVE_H
#define CONfig_SENSOR_FLASHACTIVE_LEVEL_0 RK29_CAM_FLASHACTIVE_L

#define CONfig_SENSOR_QCIF_FPS_FIXED_0      15000
#define CONfig_SENSOR_240X160_FPS_FIXED_0   15000
#define CONfig_SENSOR_QVGA_FPS_FIXED_0      15000
#define CONfig_SENSOR_CIF_FPS_FIXED_0       15000
#define CONfig_SENSOR_VGA_FPS_FIXED_0       15000
#define CONfig_SENSOR_480P_FPS_FIXED_0      15000
#define CONfig_SENSOR_SVGA_FPS_FIXED_0      15000
#define CONfig_SENSOR_720P_FPS_FIXED_0      30000

#define CONfig_SENSOR_01  RK29_CAM_SENSOR_OV5642                   /* back camera sensor 1 */ //后置1号摄像头
#define CONfig_SENSOR_IIC_ADDR_01 	    0x00
#define CONfig_SENSOR_IIC_ADAPTER_ID_01    1
#define CONfig_SENSOR_ORIENTATION_01       90
#define CONfig_SENSOR_POWER_PIN_01         INVALID_GPIO
#define CONfig_SENSOR_RESET_PIN_01         INVALID_GPIO
#define CONfig_SENSOR_POWERDN_PIN_01       RK29_PIN6_PB7
#define CONfig_SENSOR_FALSH_PIN_01         INVALID_GPIO
#define CONfig_SENSOR_POWERACTIVE_LEVEL_01 RK29_CAM_POWERACTIVE_L
#define CONfig_SENSOR_RESETACTIVE_LEVEL_01 RK29_CAM_RESETACTIVE_L
#define CONfig_SENSOR_POWERDNACTIVE_LEVEL_01 RK29_CAM_POWERDNACTIVE_H
#define CONfig_SENSOR_FLASHACTIVE_LEVEL_01 RK29_CAM_FLASHACTIVE_L

#define CONfig_SENSOR_QCIF_FPS_FIXED_01      15000
#define CONfig_SENSOR_240X160_FPS_FIXED_01   15000
#define CONfig_SENSOR_QVGA_FPS_FIXED_01      15000
#define CONfig_SENSOR_CIF_FPS_FIXED_01       15000
#define CONfig_SENSOR_VGA_FPS_FIXED_01       15000
#define CONfig_SENSOR_480P_FPS_FIXED_01      15000
#define CONfig_SENSOR_SVGA_FPS_FIXED_01      15000
#define CONfig_SENSOR_720P_FPS_FIXED_01     30000

#define CONfig_SENSOR_02 RK29_CAM_SENSOR_OV5640                      /* back camera sensor 2 */  //后置2号摄像头
#define CONfig_SENSOR_IIC_ADDR_02 	    0x00
#define CONfig_SENSOR_IIC_ADAPTER_ID_02    1
#define CONfig_SENSOR_ORIENTATION_02       90
#define CONfig_SENSOR_POWER_PIN_02         INVALID_GPIO
#define CONfig_SENSOR_RESET_PIN_02         INVALID_GPIO
#define CONfig_SENSOR_POWERDN_PIN_02       RK29_PIN6_PB7
#define CONfig_SENSOR_FALSH_PIN_02         INVALID_GPIO
#define CONfig_SENSOR_POWERACTIVE_LEVEL_02 RK29_CAM_POWERACTIVE_L
#define CONfig_SENSOR_RESETACTIVE_LEVEL_02 RK29_CAM_RESETACTIVE_L
#define CONfig_SENSOR_POWERDNACTIVE_LEVEL_02 RK29_CAM_POWERDNACTIVE_H
#define CONfig_SENSOR_FLASHACTIVE_LEVEL_02 RK29_CAM_FLASHACTIVE_L

#define CONfig_SENSOR_QCIF_FPS_FIXED_02      15000
#define CONfig_SENSOR_240X160_FPS_FIXED_02   15000
#define CONfig_SENSOR_QVGA_FPS_FIXED_02      15000
#define CONfig_SENSOR_CIF_FPS_FIXED_02       15000
#define CONfig_SENSOR_VGA_FPS_FIXED_02       15000
#define CONfig_SENSOR_480P_FPS_FIXED_02      15000
#define CONfig_SENSOR_SVGA_FPS_FIXED_02      15000
#define CONfig_SENSOR_720P_FPS_FIXED_02      30000


#define CONfig_SENSOR_1 RK29_CAM_SENSOR_GC0309                      /* front camera sensor */  //前置0号摄像头
#define CONfig_SENSOR_IIC_ADDR_1            0x42
#define CONfig_SENSOR_IIC_ADAPTER_ID_1    1
#define CONfig_SENSOR_ORIENTATION_1       270
#define CONfig_SENSOR_POWER_PIN_1         RK29_PIN5_PC3	//IOMUX
#define CONfig_SENSOR_RESET_PIN_1         RK29_PIN6_PA5  	//IOMUX
#define CONfig_SENSOR_POWERDN_PIN_1       RK29_PIN0_PB4 	//IOMUX
#define CONfig_SENSOR_FALSH_PIN_1         INVALID_GPIO
#define CONfig_SENSOR_POWERACTIVE_LEVEL_1 RK29_CAM_POWERACTIVE_H
#define CONfig_SENSOR_RESETACTIVE_LEVEL_1 RK29_CAM_RESETACTIVE_L
#define CONfig_SENSOR_POWERDNACTIVE_LEVEL_1 RK29_CAM_POWERDNACTIVE_H
#define CONfig_SENSOR_FLASHACTIVE_LEVEL_1 RK29_CAM_FLASHACTIVE_L

#define CONfig_SENSOR_QCIF_FPS_FIXED_1      15000
#define CONfig_SENSOR_240X160_FPS_FIXED_1   15000
#define CONfig_SENSOR_QVGA_FPS_FIXED_1      15000
#define CONfig_SENSOR_CIF_FPS_FIXED_1       15000
#define CONfig_SENSOR_VGA_FPS_FIXED_1       15000
#define CONfig_SENSOR_480P_FPS_FIXED_1      15000
#define CONfig_SENSOR_SVGA_FPS_FIXED_1      15000
#define CONfig_SENSOR_720P_FPS_FIXED_1      30000

#define CONfig_SENSOR_11 RK29_CAM_SENSOR_OV2659                      /* front camera sensor 1 */  //前置1号摄像头
#define CONfig_SENSOR_IIC_ADDR_11 	    0x00
#define CONfig_SENSOR_IIC_ADAPTER_ID_11    1
#define CONfig_SENSOR_ORIENTATION_11       270
#define CONfig_SENSOR_POWER_PIN_11         INVALID_GPIO
#define CONfig_SENSOR_RESET_PIN_11         INVALID_GPIO
#define CONfig_SENSOR_POWERDN_PIN_11       RK29_PIN5_PD7
#define CONfig_SENSOR_FALSH_PIN_11         INVALID_GPIO
#define CONfig_SENSOR_POWERACTIVE_LEVEL_11 RK29_CAM_POWERACTIVE_L
#define CONfig_SENSOR_RESETACTIVE_LEVEL_11 RK29_CAM_RESETACTIVE_L
#define CONfig_SENSOR_POWERDNACTIVE_LEVEL_11 RK29_CAM_POWERDNACTIVE_H
#define CONfig_SENSOR_FLASHACTIVE_LEVEL_11 RK29_CAM_FLASHACTIVE_L

#define CONfig_SENSOR_QCIF_FPS_FIXED_11      15000
#define CONfig_SENSOR_240X160_FPS_FIXED_11   15000
#define CONfig_SENSOR_QVGA_FPS_FIXED_11      15000
#define CONfig_SENSOR_CIF_FPS_FIXED_11       15000
#define CONfig_SENSOR_VGA_FPS_FIXED_11       15000
#define CONfig_SENSOR_480P_FPS_FIXED_11      15000
#define CONfig_SENSOR_SVGA_FPS_FIXED_11      15000
#define CONfig_SENSOR_720P_FPS_FIXED_11      30000

#define CONfig_SENSOR_12 RK29_CAM_SENSOR_OV2655                      /* front camera sensor 2 */  //前置2号摄像头
#define CONfig_SENSOR_IIC_ADDR_12 	    0x00
#define CONfig_SENSOR_IIC_ADAPTER_ID_12    1
#define CONfig_SENSOR_ORIENTATION_12       270
#define CONfig_SENSOR_POWER_PIN_12         INVALID_GPIO
#define CONfig_SENSOR_RESET_PIN_12         INVALID_GPIO
#define CONfig_SENSOR_POWERDN_PIN_12       RK29_PIN5_PD7
#define CONfig_SENSOR_FALSH_PIN_12         INVALID_GPIO
#define CONfig_SENSOR_POWERACTIVE_LEVEL_12 RK29_CAM_POWERACTIVE_L
#define CONfig_SENSOR_RESETACTIVE_LEVEL_12 RK29_CAM_RESETACTIVE_L
#define CONfig_SENSOR_POWERDNACTIVE_LEVEL_12 RK29_CAM_POWERDNACTIVE_H
#define CONfig_SENSOR_FLASHACTIVE_LEVEL_12 RK29_CAM_FLASHACTIVE_L

#define CONfig_SENSOR_QCIF_FPS_FIXED_12      15000
#define CONfig_SENSOR_240X160_FPS_FIXED_12   15000
#define CONfig_SENSOR_QVGA_FPS_FIXED_12      15000
#define CONfig_SENSOR_CIF_FPS_FIXED_12       15000
#define CONfig_SENSOR_VGA_FPS_FIXED_12       15000
#define CONfig_SENSOR_480P_FPS_FIXED_12      15000
#define CONfig_SENSOR_SVGA_FPS_FIXED_12      15000
#define CONfig_SENSOR_720P_FPS_FIXED_12      30000

#endif 

2,初始化操作:
static int rk29_sensor_io_init(void);
static int rk29_sensor_io_deinit(int sensor);
static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd,int on);

static struct rk29camera_platform_data rk29_camera_platform_data = {
    .io_init = rk29_sensor_io_init,.io_deinit = rk29_sensor_io_deinit,.sensor_ioctrl = rk29_sensor_ioctrl,.gpio_res = {
        {
            .gpio_reset = CONfig_SENSOR_RESET_PIN_0,.gpio_power = CONfig_SENSOR_POWER_PIN_0,.gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_0,.gpio_flash = CONfig_SENSOR_FALSH_PIN_0,.gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_0|CONfig_SENSOR_RESETACTIVE_LEVEL_0|CONfig_SENSOR_POWERDNACTIVE_LEVEL_0|CONfig_SENSOR_FLASHACTIVE_LEVEL_0),.gpio_init = 0,.dev_name = SENSOR_DEVICE_NAME_0,},{
        #ifdef CONfig_SENSOR_01
            .gpio_reset = CONfig_SENSOR_RESET_PIN_01,.gpio_power = CONfig_SENSOR_POWER_PIN_01,.gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_01,.gpio_flash = CONfig_SENSOR_FALSH_PIN_01,.gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_01|CONfig_SENSOR_RESETACTIVE_LEVEL_01|CONfig_SENSOR_POWERDNACTIVE_LEVEL_01|CONfig_SENSOR_FLASHACTIVE_LEVEL_01),.dev_name = SENSOR_DEVICE_NAME_01,#else
            .gpio_reset = INVALID_GPIO,.gpio_power = INVALID_GPIO,.gpio_powerdown = INVALID_GPIO,.gpio_flash = INVALID_GPIO,.gpio_flag = 0,.dev_name = NULL,#endif
        },{
        #ifdef CONfig_SENSOR_02
            .gpio_reset = CONfig_SENSOR_RESET_PIN_02,.gpio_power = CONfig_SENSOR_POWER_PIN_02,.gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_02,.gpio_flash = CONfig_SENSOR_FALSH_PIN_02,.gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_02|CONfig_SENSOR_RESETACTIVE_LEVEL_02|CONfig_SENSOR_POWERDNACTIVE_LEVEL_02|CONfig_SENSOR_FLASHACTIVE_LEVEL_02),.dev_name = SENSOR_DEVICE_NAME_02,{
            .gpio_reset = CONfig_SENSOR_RESET_PIN_1,.gpio_power = CONfig_SENSOR_POWER_PIN_1,.gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_1,.gpio_flash = CONfig_SENSOR_FALSH_PIN_1,.gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_1|CONfig_SENSOR_RESETACTIVE_LEVEL_1|CONfig_SENSOR_POWERDNACTIVE_LEVEL_1|CONfig_SENSOR_FLASHACTIVE_LEVEL_1),.dev_name = SENSOR_DEVICE_NAME_1,{
        #ifdef CONfig_SENSOR_11
            .gpio_reset = CONfig_SENSOR_RESET_PIN_11,.gpio_power = CONfig_SENSOR_POWER_PIN_11,.gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_11,.gpio_flash = CONfig_SENSOR_FALSH_PIN_11,.gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_11|CONfig_SENSOR_RESETACTIVE_LEVEL_11|CONfig_SENSOR_POWERDNACTIVE_LEVEL_11|CONfig_SENSOR_FLASHACTIVE_LEVEL_11),.dev_name = SENSOR_DEVICE_NAME_11,#endif        
        },{
        #ifdef CONfig_SENSOR_12
            .gpio_reset = CONfig_SENSOR_RESET_PIN_12,.gpio_power = CONfig_SENSOR_POWER_PIN_12,.gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_12,.gpio_flash = CONfig_SENSOR_FALSH_PIN_12,.gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_12|CONfig_SENSOR_RESETACTIVE_LEVEL_12|CONfig_SENSOR_POWERDNACTIVE_LEVEL_12|CONfig_SENSOR_FLASHACTIVE_LEVEL_12),.dev_name = SENSOR_DEVICE_NAME_12,#endif
        }
    },#ifdef CONfig_VIDEO_RK29_WORK_IPP
	.meminfo = {
	    .name  = "camera_ipp_mem",.start = MEM_CAMIPP_BASE,.size   = MEM_CAMIPP_SIZE,#endif
    .info = {
        {
            .dev_name = SENSOR_DEVICE_NAME_0,.orientation = CONfig_SENSOR_ORIENTATION_0,#ifdef CONfig_SENSOR_01
	    },{
	        .dev_name = SENSOR_DEVICE_NAME_01,.orientation = CONfig_SENSOR_ORIENTATION_01,#else
        },{
	        .dev_name = NULL,.orientation = 0x00,#endif
        #ifdef CONfig_SENSOR_02
	    },{
	        .dev_name = SENSOR_DEVICE_NAME_02,.orientation = CONfig_SENSOR_ORIENTATION_02,{
            .dev_name = SENSOR_DEVICE_NAME_1,.orientation = CONfig_SENSOR_ORIENTATION_1,#ifdef CONfig_SENSOR_11 
        },{
            .dev_name = SENSOR_DEVICE_NAME_11,.orientation = CONfig_SENSOR_ORIENTATION_11,#endif
        #ifdef CONfig_SENSOR_12
	    },{
	        .dev_name = SENSOR_DEVICE_NAME_12,.orientation = CONfig_SENSOR_ORIENTATION_12,#endif
	    }
	}
};

static u64 rockchip_device_camera_dmamask = 0xffffffffUL;
static struct resource rk29_camera_resource[] = {
	[0] = {
		.start = RK29_VIP_PHYS,.end   = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,.flags = IORESOURCE_MEM,[1] = {
		.start = IRQ_VIP,.end   = IRQ_VIP,.flags = IORESOURCE_IRQ,}
};

/*platform_device : */
static struct platform_device rk29_device_camera = {
	.name		  = RK29_CAM_DRV_NAME,.id		  = RK29_CAM_PLATFORM_DEV_ID,/* This is used to put cameras on this interface */
	.num_resources	  = ARRAY_SIZE(rk29_camera_resource),.resource	  = rk29_camera_resource,.dev            = {
		.dma_mask = &rockchip_device_camera_dmamask,.coherent_dma_mask = 0xffffffffUL,.platform_data  = &rk29_camera_platform_data,}
};

后置摄像头加载参数:
static int rk29_sensor_powerdown(struct device *dev,int on)
{
	return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);
}
static int rk29_sensor_power(struct device *dev,int on)
{
    if (!on)                        /* ddl@rock-chips.com : Ensure sensor enter standby or power off */
        rk29_sensor_powerdown(dev,1);
	rk29_sensor_ioctrl(dev,Cam_Power,on);    
    return 0;
}
static int rk29_sensor_reset(struct device *dev)
{
	rk29_sensor_ioctrl(dev,Cam_Reset,1);
	msleep(2);
	rk29_sensor_ioctrl(dev,0);
	return 0;
}

#if (CONfig_SENSOR_IIC_ADDR_0 != 0x00)
static struct i2c_board_info rk29_i2c_cam_info_0[] = {
	{
		I2C_BOARD_INFO(SENSOR_NAME_0,CONfig_SENSOR_IIC_ADDR_0>>1)
	},};

static struct soc_camera_link rk29_iclink_0 = {
	.bus_id		= RK29_CAM_PLATFORM_DEV_ID,.power		= rk29_sensor_power,#if (CONfig_SENSOR_RESET_PIN_0 != INVALID_GPIO)
    .reset      = rk29_sensor_reset,#endif    
	.powerdown  = rk29_sensor_powerdown,.board_info	= &rk29_i2c_cam_info_0[0],.i2c_adapter_id	= CONfig_SENSOR_IIC_ADAPTER_ID_0,.module_name	= SENSOR_NAME_0,};

/*platform_device : soc-camera need  */
static struct platform_device rk29_soc_camera_pdrv_0 = {
	.name	= "soc-camera-pdrv",.id	= 0,.dev	= {
		.init_name = SENSOR_DEVICE_NAME_0,.platform_data = &rk29_iclink_0,};

前置加载:
#if (CONfig_SENSOR_IIC_ADDR_1 != 0x00)
static struct i2c_board_info rk29_i2c_cam_info_1[] = {
	{
		I2C_BOARD_INFO(SENSOR_NAME_1,CONfig_SENSOR_IIC_ADDR_1>>1)
	},};

static struct soc_camera_link rk29_iclink_1 = {
	.bus_id		= RK29_CAM_PLATFORM_DEV_ID,#if (CONfig_SENSOR_RESET_PIN_1 != INVALID_GPIO)
    .reset      = rk29_sensor_reset,#endif  	
	.powerdown  = rk29_sensor_powerdown,.board_info	= &rk29_i2c_cam_info_1[0],.i2c_adapter_id	= CONfig_SENSOR_IIC_ADAPTER_ID_1,.module_name	= SENSOR_NAME_1,};

/*platform_device : soc-camera need  */
static struct platform_device rk29_soc_camera_pdrv_1 = {
	.name	= "soc-camera-pdrv",.id	= 1,.dev	= {
		.init_name = SENSOR_DEVICE_NAME_1,.platform_data = &rk29_iclink_1,};
#endif

至于真正的引脚初始化操作,可以根据实际需求来操作引脚:
static int rk29_sensor_io_init(void);
static int rk29_sensor_io_deinit(int sensor);
static int rk29_sensor_ioctrl(struct device *dev,int on);
3.摄像头相关的认参数配置:

static int sensor_power_default_cb (struct rk29camera_gpio_res *res,int on)
{
    int camera_power = res->gpio_power;
    int camera_ioflag = res->gpio_flag;
    int camera_io_init = res->gpio_init;
    int ret = 0;
    
    if (camera_power != INVALID_GPIO)  {
		if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
            if (on) {
            	gpio_set_value(camera_power,((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
    			dprintk("%s..%s..PowerPin=%d ..PinLevel = %x   \n",__FUNCTION__,res->dev_name,camera_power,((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
    			msleep(10);
    		} else {
    			gpio_set_value(camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
    			dprintk("%s..%s..PowerPin=%d ..PinLevel = %x   \n",(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
    		}
		} else {
			ret = RK29_CAM_EIO_REQUESTFAIL;
			printk("%s..%s..PowerPin=%d request Failed!\n",camera_power);
	    }        
    } else {
		ret = RK29_CAM_EIO_INVALID;
    } 

    return ret;
}

static int sensor_reset_default_cb (struct rk29camera_gpio_res *res,int on)
{
    int camera_reset = res->gpio_reset;
    int camera_ioflag = res->gpio_flag;
    int camera_io_init = res->gpio_init;  
    int ret = 0;
    
    if (camera_reset != INVALID_GPIO) {
		if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {
			if (on) {
	        	gpio_set_value(camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
	        	dprintk("%s..%s..ResetPin=%d ..PinLevel = %x \n",camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
			} else {
				gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
        		dprintk("%s..%s..ResetPin= %d..PinLevel = %x   \n",(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
	        }
		} else {
			ret = RK29_CAM_EIO_REQUESTFAIL;
			printk("%s..%s..ResetPin=%d request Failed!\n",camera_reset);
		}
    } else {
		ret = RK29_CAM_EIO_INVALID;
    }

    return ret;
}

static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res,int on)
{
    int camera_powerdown = res->gpio_powerdown;
    int camera_ioflag = res->gpio_flag;
    int camera_io_init = res->gpio_init;  
    int ret = 0;    

    if (camera_powerdown != INVALID_GPIO) {
		if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {
			if (on) {
	        	gpio_set_value(camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
	        	dprintk("%s..%s..PowerDownPin=%d ..PinLevel = %x \n",camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
			} else {
				gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
        		dprintk("%s..%s..PowerDownPin= %d..PinLevel = %x   \n",(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
	        }
		} else {
			ret = RK29_CAM_EIO_REQUESTFAIL;
			dprintk("%s..%s..PowerDownPin=%d request Failed!\n",camera_powerdown);
		}
    } else {
		ret = RK29_CAM_EIO_INVALID;
    }
    return ret;
}


static int sensor_flash_default_cb (struct rk29camera_gpio_res *res,int on)
{
    int camera_flash = res->gpio_flash;
    int camera_ioflag = res->gpio_flag;
    int camera_io_init = res->gpio_init;  
    int ret = 0;    

    if (camera_flash != INVALID_GPIO) {
		if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {
            switch (on)
            {
                case Flash_Off:
                {
                    gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
        		    dprintk("\n%s..%s..FlashPin= %d..PinLevel = %x   \n",camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS)); 
        		    break;
                }

                case Flash_On:
                {
                    gpio_set_value(camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
	        	    dprintk("%s..%s..FlashPin=%d ..PinLevel = %x \n",((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
	        	    break;
                }

                case Flash_Torch:
                {
                    gpio_set_value(camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
	        	    break;
                }

                default:
                {
                    printk("%s..%s..Flash command(%d) is invalidate \n",on);
                    break;
                }
            }
		} else {
			ret = RK29_CAM_EIO_REQUESTFAIL;
			printk("%s..%s..FlashPin=%d request Failed!\n",camera_flash);
		}
    } else {
		ret = RK29_CAM_EIO_INVALID;
    }
    return ret;
}

static void rk29_sensor_fps_get(int idx,unsigned int *val,int w,int h)
{
    switch (idx)
    {
        case 0:
        {
            if ((w==176) && (h==144)) {
                *val = CONfig_SENSOR_QCIF_FPS_FIXED_0;
            #ifdef CONfig_SENSOR_240X160_FPS_FIXED_0
            } else if ((w==240) && (h==160)) {
                *val = CONfig_SENSOR_240X160_FPS_FIXED_0;
            #endif
            } else if ((w==320) && (h==240)) {
                *val = CONfig_SENSOR_QVGA_FPS_FIXED_0;
            } else if ((w==352) && (h==288)) {
                *val = CONfig_SENSOR_CIF_FPS_FIXED_0;
            } else if ((w==640) && (h==480)) {
                *val = CONfig_SENSOR_VGA_FPS_FIXED_0;
            } else if ((w==720) && (h==480)) {
                *val = CONfig_SENSOR_480P_FPS_FIXED_0;
            } else if ((w==1280) && (h==720)) {
                *val = CONfig_SENSOR_720P_FPS_FIXED_0;
            }
            break;
        }
        #ifdef CONfig_SENSOR_01
        case 1:
        {
            if ((w==176) && (h==144)) {
                *val = CONfig_SENSOR_QCIF_FPS_FIXED_01;
            #ifdef CONfig_SENSOR_240X160_FPS_FIXED_01
            } else if ((w==240) && (h==160)) {
                *val = CONfig_SENSOR_240X160_FPS_FIXED_01;
            #endif
            } else if ((w==320) && (h==240)) {
                *val = CONfig_SENSOR_QVGA_FPS_FIXED_01;
            } else if ((w==352) && (h==288)) {
                *val = CONfig_SENSOR_CIF_FPS_FIXED_01;
            } else if ((w==640) && (h==480)) {
                *val = CONfig_SENSOR_VGA_FPS_FIXED_01;
            } else if ((w==720) && (h==480)) {
                *val = CONfig_SENSOR_480P_FPS_FIXED_01;
            } else if ((w==1280) && (h==720)) {
                *val = CONfig_SENSOR_720P_FPS_FIXED_01;
            }
            break;
        }
        #endif
        #ifdef CONfig_SENSOR_02
        case 2:
        {
            if ((w==176) && (h==144)) {
                *val = CONfig_SENSOR_QCIF_FPS_FIXED_02;
            #ifdef CONfig_SENSOR_240X160_FPS_FIXED_02
            } else if ((w==240) && (h==160)) {
                *val = CONfig_SENSOR_240X160_FPS_FIXED_02;
            #endif
            } else if ((w==320) && (h==240)) {
                *val = CONfig_SENSOR_QVGA_FPS_FIXED_02;
            } else if ((w==352) && (h==288)) {
                *val = CONfig_SENSOR_CIF_FPS_FIXED_02;
            } else if ((w==640) && (h==480)) {
                *val = CONfig_SENSOR_VGA_FPS_FIXED_02;
            } else if ((w==720) && (h==480)) {
                *val = CONfig_SENSOR_480P_FPS_FIXED_02;
            } else if ((w==1280) && (h==720)) {
                *val = CONfig_SENSOR_720P_FPS_FIXED_02;
            }
            break;
        }
        #endif
        
        case 3:
        {
            if ((w==176) && (h==144)) {
                *val = CONfig_SENSOR_QCIF_FPS_FIXED_1;
            #ifdef CONfig_SENSOR_240X160_FPS_FIXED_1
            } else if ((w==240) && (h==160)) {
                *val = CONfig_SENSOR_240X160_FPS_FIXED_1;
            #endif
            } else if ((w==320) && (h==240)) {
                *val = CONfig_SENSOR_QVGA_FPS_FIXED_1;
            } else if ((w==352) && (h==288)) {
                *val = CONfig_SENSOR_CIF_FPS_FIXED_1;
            } else if ((w==640) && (h==480)) {
                *val = CONfig_SENSOR_VGA_FPS_FIXED_1;
            } else if ((w==720) && (h==480)) {
                *val = CONfig_SENSOR_480P_FPS_FIXED_1;
            } else if ((w==1280) && (h==720)) {
                *val = CONfig_SENSOR_720P_FPS_FIXED_1;
            }
            break;
        }
        #ifdef CONfig_SENSOR_11
        case 4:
        {
            if ((w==176) && (h==144)) {
                *val = CONfig_SENSOR_QCIF_FPS_FIXED_11;
            #ifdef CONfig_SENSOR_240X160_FPS_FIXED_11
            } else if ((w==240) && (h==160)) {
                *val = CONfig_SENSOR_240X160_FPS_FIXED_11;
            #endif
            } else if ((w==320) && (h==240)) {
                *val = CONfig_SENSOR_QVGA_FPS_FIXED_11;
            } else if ((w==352) && (h==288)) {
                *val = CONfig_SENSOR_CIF_FPS_FIXED_11;
            } else if ((w==640) && (h==480)) {
                *val = CONfig_SENSOR_VGA_FPS_FIXED_11;
            } else if ((w==720) && (h==480)) {
                *val = CONfig_SENSOR_480P_FPS_FIXED_11;
            } else if ((w==1280) && (h==720)) {
                *val = CONfig_SENSOR_720P_FPS_FIXED_11;
            }
            break;
        }
        #endif
        #ifdef CONfig_SENSOR_12
        case 5:
        {
            if ((w==176) && (h==144)) {
                *val = CONfig_SENSOR_QCIF_FPS_FIXED_12;
            #ifdef CONfig_SENSOR_240X160_FPS_FIXED_12
            } else if ((w==240) && (h==160)) {
                *val = CONfig_SENSOR_240X160_FPS_FIXED_12;
            #endif
            } else if ((w==320) && (h==240)) {
                *val = CONfig_SENSOR_QVGA_FPS_FIXED_12;
            } else if ((w==352) && (h==288)) {
                *val = CONfig_SENSOR_CIF_FPS_FIXED_12;
            } else if ((w==640) && (h==480)) {
                *val = CONfig_SENSOR_VGA_FPS_FIXED_12;
            } else if ((w==720) && (h==480)) {
                *val = CONfig_SENSOR_480P_FPS_FIXED_12;
            } else if ((w==1280) && (h==720)) {
                *val = CONfig_SENSOR_720P_FPS_FIXED_12;
            }
            break;
        }
        #endif
        default:
            printk(KERN_ERR"rk29_cam_io: sensor-%d have not been define in board file!",idx);
    }
}
这里面包括图片尺寸大小,分辨率等设置。
4.具体摄像头的寄存器配置:
首先:make menuconfig

           Device Drivers------>

Multimedia support ----->

Video capture adapters ----->

选择相应的Camera驱动,比如GC0309

然后根据具体的需求到gc0309.c里面去按照手册配置寄存器。


主要是修改1.1里面前置和后置摄像头的引脚,地址,名字,以及一些参数。

及2和3里面初始化的配置

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

相关推荐