RK29 Camare移植--内核部分
发布时间:2020-12-15 18:36:11 所属栏目:百科 来源:网络整理
导读: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#i
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里面初始化的配置 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |