RK29 Camare移植--内核部分

1444人阅读 评论(2) 收藏 举报

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

  1. static struct platform_device *devices[] __initdata = {  
  2. #ifdef CONfig_VIDEO_RK29   
  3.     &rk29_device_camera,      /* ddl@rock-chips.com : camera support  */   
  4.     #if (CONfig_SENSOR_IIC_ADDR_0 != 0x00)   
  5.     &rk29_soc_camera_pdrv_0,  
  6.     #endif   
  7.     #if (CONfig_SENSOR_IIC_ADDR_1 != 0x00)   
  8.     &rk29_soc_camera_pdrv_1,  
  9.     #endif   
  10.     #if (PMEM_CAM_SIZE > 0)   
  11.     &android_pmem_cam_device,  
  12.     #endif   
  13. #endif  
  14. }  

1.1最大支持6个摄像头,其中前置3个,后置3个,后置分别是。00,01,02.前置为1,11,12如下所示:
  1. #ifdef CONfig_VIDEO_RK29   
  2. /*---------------- Camera Sensor Macro Define Begin  ------------------------*/   
  3. /*---------------- Camera Sensor Configuration Macro Begin ------------------------*/   
  4. #define CONfig_SENSOR_0 RK29_CAM_SENSOR_GC2015                      /* back camera sensor */ //后置0号摄像头   
  5. #define CONfig_SENSOR_IIC_ADDR_0        0x60   
  6. #define CONfig_SENSOR_IIC_ADAPTER_ID_0    1   
  7. #define CONfig_SENSOR_ORIENTATION_0       90   
  8. #define CONfig_SENSOR_POWER_PIN_0         RK29_PIN5_PC3   
  9. #define CONfig_SENSOR_RESET_PIN_0         RK29_PIN6_PA5   
  10. #define CONfig_SENSOR_POWERDN_PIN_0       RK29_PIN0_PB2   
  11. #define CONfig_SENSOR_FALSH_PIN_0         INVALID_GPIO   
  12. #define CONfig_SENSOR_POWERACTIVE_LEVEL_0 RK29_CAM_POWERACTIVE_H   
  13. #define CONfig_SENSOR_RESETACTIVE_LEVEL_0 RK29_CAM_RESETACTIVE_L   
  14. #define CONfig_SENSOR_POWERDNACTIVE_LEVEL_0 RK29_CAM_POWERDNACTIVE_H   
  15. #define CONfig_SENSOR_FLASHACTIVE_LEVEL_0 RK29_CAM_FLASHACTIVE_L   
  16.   
  17. #define CONfig_SENSOR_QCIF_FPS_FIXED_0      15000   
  18. #define CONfig_SENSOR_240X160_FPS_FIXED_0   15000   
  19. #define CONfig_SENSOR_QVGA_FPS_FIXED_0      15000   
  20. #define CONfig_SENSOR_CIF_FPS_FIXED_0       15000   
  21. #define CONfig_SENSOR_VGA_FPS_FIXED_0       15000   
  22. #define CONfig_SENSOR_480P_FPS_FIXED_0      15000   
  23. #define CONfig_SENSOR_SVGA_FPS_FIXED_0      15000   
  24. #define CONfig_SENSOR_720P_FPS_FIXED_0      30000   
  25.   
  26. #define CONfig_SENSOR_01  RK29_CAM_SENSOR_OV5642                   /* back camera sensor 1 */ //后置1号摄像头   
  27. #define CONfig_SENSOR_IIC_ADDR_01       0x00   
  28. #define CONfig_SENSOR_IIC_ADAPTER_ID_01    1   
  29. #define CONfig_SENSOR_ORIENTATION_01       90   
  30. #define CONfig_SENSOR_POWER_PIN_01         INVALID_GPIO   
  31. #define CONfig_SENSOR_RESET_PIN_01         INVALID_GPIO   
  32. #define CONfig_SENSOR_POWERDN_PIN_01       RK29_PIN6_PB7   
  33. #define CONfig_SENSOR_FALSH_PIN_01         INVALID_GPIO   
  34. #define CONfig_SENSOR_POWERACTIVE_LEVEL_01 RK29_CAM_POWERACTIVE_L   
  35. #define CONfig_SENSOR_RESETACTIVE_LEVEL_01 RK29_CAM_RESETACTIVE_L   
  36. #define CONfig_SENSOR_POWERDNACTIVE_LEVEL_01 RK29_CAM_POWERDNACTIVE_H   
  37. #define CONfig_SENSOR_FLASHACTIVE_LEVEL_01 RK29_CAM_FLASHACTIVE_L   
  38.   
  39. #define CONfig_SENSOR_QCIF_FPS_FIXED_01      15000   
  40. #define CONfig_SENSOR_240X160_FPS_FIXED_01   15000   
  41. #define CONfig_SENSOR_QVGA_FPS_FIXED_01      15000   
  42. #define CONfig_SENSOR_CIF_FPS_FIXED_01       15000   
  43. #define CONfig_SENSOR_VGA_FPS_FIXED_01       15000   
  44. #define CONfig_SENSOR_480P_FPS_FIXED_01      15000   
  45. #define CONfig_SENSOR_SVGA_FPS_FIXED_01      15000   
  46. #define CONfig_SENSOR_720P_FPS_FIXED_01     30000   
  47.   
  48. #define CONfig_SENSOR_02 RK29_CAM_SENSOR_OV5640                      /* back camera sensor 2 */  //后置2号摄像头   
  49. #define CONfig_SENSOR_IIC_ADDR_02       0x00   
  50. #define CONfig_SENSOR_IIC_ADAPTER_ID_02    1   
  51. #define CONfig_SENSOR_ORIENTATION_02       90   
  52. #define CONfig_SENSOR_POWER_PIN_02         INVALID_GPIO   
  53. #define CONfig_SENSOR_RESET_PIN_02         INVALID_GPIO   
  54. #define CONfig_SENSOR_POWERDN_PIN_02       RK29_PIN6_PB7   
  55. #define CONfig_SENSOR_FALSH_PIN_02         INVALID_GPIO   
  56. #define CONfig_SENSOR_POWERACTIVE_LEVEL_02 RK29_CAM_POWERACTIVE_L   
  57. #define CONfig_SENSOR_RESETACTIVE_LEVEL_02 RK29_CAM_RESETACTIVE_L   
  58. #define CONfig_SENSOR_POWERDNACTIVE_LEVEL_02 RK29_CAM_POWERDNACTIVE_H   
  59. #define CONfig_SENSOR_FLASHACTIVE_LEVEL_02 RK29_CAM_FLASHACTIVE_L   
  60.   
  61. #define CONfig_SENSOR_QCIF_FPS_FIXED_02      15000   
  62. #define CONfig_SENSOR_240X160_FPS_FIXED_02   15000   
  63. #define CONfig_SENSOR_QVGA_FPS_FIXED_02      15000   
  64. #define CONfig_SENSOR_CIF_FPS_FIXED_02       15000   
  65. #define CONfig_SENSOR_VGA_FPS_FIXED_02       15000   
  66. #define CONfig_SENSOR_480P_FPS_FIXED_02      15000   
  67. #define CONfig_SENSOR_SVGA_FPS_FIXED_02      15000   
  68. #define CONfig_SENSOR_720P_FPS_FIXED_02      30000   
  69.   
  70.   
  71. #define CONfig_SENSOR_1 RK29_CAM_SENSOR_GC0309                      /* front camera sensor */  //前置0号摄像头   
  72. #define CONfig_SENSOR_IIC_ADDR_1            0x42   
  73. #define CONfig_SENSOR_IIC_ADAPTER_ID_1    1   
  74. #define CONfig_SENSOR_ORIENTATION_1       270   
  75. #define CONfig_SENSOR_POWER_PIN_1         RK29_PIN5_PC3 //IOMUX   
  76. #define CONfig_SENSOR_RESET_PIN_1         RK29_PIN6_PA5     //IOMUX   
  77. #define CONfig_SENSOR_POWERDN_PIN_1       RK29_PIN0_PB4     //IOMUX   
  78. #define CONfig_SENSOR_FALSH_PIN_1         INVALID_GPIO   
  79. #define CONfig_SENSOR_POWERACTIVE_LEVEL_1 RK29_CAM_POWERACTIVE_H   
  80. #define CONfig_SENSOR_RESETACTIVE_LEVEL_1 RK29_CAM_RESETACTIVE_L   
  81. #define CONfig_SENSOR_POWERDNACTIVE_LEVEL_1 RK29_CAM_POWERDNACTIVE_H   
  82. #define CONfig_SENSOR_FLASHACTIVE_LEVEL_1 RK29_CAM_FLASHACTIVE_L   
  83.   
  84. #define CONfig_SENSOR_QCIF_FPS_FIXED_1      15000   
  85. #define CONfig_SENSOR_240X160_FPS_FIXED_1   15000   
  86. #define CONfig_SENSOR_QVGA_FPS_FIXED_1      15000   
  87. #define CONfig_SENSOR_CIF_FPS_FIXED_1       15000   
  88. #define CONfig_SENSOR_VGA_FPS_FIXED_1       15000   
  89. #define CONfig_SENSOR_480P_FPS_FIXED_1      15000   
  90. #define CONfig_SENSOR_SVGA_FPS_FIXED_1      15000   
  91. #define CONfig_SENSOR_720P_FPS_FIXED_1      30000   
  92.   
  93. #define CONfig_SENSOR_11 RK29_CAM_SENSOR_OV2659                      /* front camera sensor 1 */  //前置1号摄像头   
  94. #define CONfig_SENSOR_IIC_ADDR_11       0x00   
  95. #define CONfig_SENSOR_IIC_ADAPTER_ID_11    1   
  96. #define CONfig_SENSOR_ORIENTATION_11       270   
  97. #define CONfig_SENSOR_POWER_PIN_11         INVALID_GPIO   
  98. #define CONfig_SENSOR_RESET_PIN_11         INVALID_GPIO   
  99. #define CONfig_SENSOR_POWERDN_PIN_11       RK29_PIN5_PD7   
  100. #define CONfig_SENSOR_FALSH_PIN_11         INVALID_GPIO   
  101. #define CONfig_SENSOR_POWERACTIVE_LEVEL_11 RK29_CAM_POWERACTIVE_L   
  102. #define CONfig_SENSOR_RESETACTIVE_LEVEL_11 RK29_CAM_RESETACTIVE_L   
  103. #define CONfig_SENSOR_POWERDNACTIVE_LEVEL_11 RK29_CAM_POWERDNACTIVE_H   
  104. #define CONfig_SENSOR_FLASHACTIVE_LEVEL_11 RK29_CAM_FLASHACTIVE_L   
  105.   
  106. #define CONfig_SENSOR_QCIF_FPS_FIXED_11      15000   
  107. #define CONfig_SENSOR_240X160_FPS_FIXED_11   15000   
  108. #define CONfig_SENSOR_QVGA_FPS_FIXED_11      15000   
  109. #define CONfig_SENSOR_CIF_FPS_FIXED_11       15000   
  110. #define CONfig_SENSOR_VGA_FPS_FIXED_11       15000   
  111. #define CONfig_SENSOR_480P_FPS_FIXED_11      15000   
  112. #define CONfig_SENSOR_SVGA_FPS_FIXED_11      15000   
  113. #define CONfig_SENSOR_720P_FPS_FIXED_11      30000   
  114.   
  115. #define CONfig_SENSOR_12 RK29_CAM_SENSOR_OV2655                      /* front camera sensor 2 */  //前置2号摄像头   
  116. #define CONfig_SENSOR_IIC_ADDR_12       0x00   
  117. #define CONfig_SENSOR_IIC_ADAPTER_ID_12    1   
  118. #define CONfig_SENSOR_ORIENTATION_12       270   
  119. #define CONfig_SENSOR_POWER_PIN_12         INVALID_GPIO   
  120. #define CONfig_SENSOR_RESET_PIN_12         INVALID_GPIO   
  121. #define CONfig_SENSOR_POWERDN_PIN_12       RK29_PIN5_PD7   
  122. #define CONfig_SENSOR_FALSH_PIN_12         INVALID_GPIO   
  123. #define CONfig_SENSOR_POWERACTIVE_LEVEL_12 RK29_CAM_POWERACTIVE_L   
  124. #define CONfig_SENSOR_RESETACTIVE_LEVEL_12 RK29_CAM_RESETACTIVE_L   
  125. #define CONfig_SENSOR_POWERDNACTIVE_LEVEL_12 RK29_CAM_POWERDNACTIVE_H   
  126. #define CONfig_SENSOR_FLASHACTIVE_LEVEL_12 RK29_CAM_FLASHACTIVE_L   
  127.   
  128. #define CONfig_SENSOR_QCIF_FPS_FIXED_12      15000   
  129. #define CONfig_SENSOR_240X160_FPS_FIXED_12   15000   
  130. #define CONfig_SENSOR_QVGA_FPS_FIXED_12      15000   
  131. #define CONfig_SENSOR_CIF_FPS_FIXED_12       15000   
  132. #define CONfig_SENSOR_VGA_FPS_FIXED_12       15000   
  133. #define CONfig_SENSOR_480P_FPS_FIXED_12      15000   
  134. #define CONfig_SENSOR_SVGA_FPS_FIXED_12      15000   
  135. #define CONfig_SENSOR_720P_FPS_FIXED_12      30000   
  136.   
  137. #endif   

2,初始化操作:
  1. static int rk29_sensor_io_init(void);   
  2. static int rk29_sensor_io_deinit(int sensor);   
  3. static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd,int on);   
  4.   
  5. static struct rk29camera_platform_data rk29_camera_platform_data = {   
  6.     .io_init = rk29_sensor_io_init,  
  7.     .io_deinit = rk29_sensor_io_deinit,  
  8.     .sensor_ioctrl = rk29_sensor_ioctrl,  
  9.     .gpio_res = {   
  10.         {   
  11.             .gpio_reset = CONfig_SENSOR_RESET_PIN_0,  
  12.             .gpio_power = CONfig_SENSOR_POWER_PIN_0,  
  13.             .gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_0,  
  14.             .gpio_flash = CONfig_SENSOR_FALSH_PIN_0,  
  15.             .gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_0|CONfig_SENSOR_RESETACTIVE_LEVEL_0|CONfig_SENSOR_POWERDNACTIVE_LEVEL_0|CONfig_SENSOR_FLASHACTIVE_LEVEL_0),  
  16.             .gpio_init = 0,               
  17.             .dev_name = SENSOR_DEVICE_NAME_0,           
  18.         }, {   
  19.         #ifdef CONfig_SENSOR_01   
  20.             .gpio_reset = CONfig_SENSOR_RESET_PIN_01,  
  21.             .gpio_power = CONfig_SENSOR_POWER_PIN_01,  
  22.             .gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_01,  
  23.             .gpio_flash = CONfig_SENSOR_FALSH_PIN_01,  
  24.             .gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_01|CONfig_SENSOR_RESETACTIVE_LEVEL_01|CONfig_SENSOR_POWERDNACTIVE_LEVEL_01|CONfig_SENSOR_FLASHACTIVE_LEVEL_01),  
  25.             .gpio_init = 0,               
  26.             .dev_name = SENSOR_DEVICE_NAME_01,  
  27.         #else   
  28.             .gpio_reset = INVALID_GPIO,  
  29.             .gpio_power = INVALID_GPIO,  
  30.             .gpio_powerdown = INVALID_GPIO,  
  31.             .gpio_flash = INVALID_GPIO,  
  32.             .gpio_flag = 0,               
  33.             .dev_name = NULL,  
  34.         #endif   
  35.         }, {   
  36.         #ifdef CONfig_SENSOR_02   
  37.             .gpio_reset = CONfig_SENSOR_RESET_PIN_02,  
  38.             .gpio_power = CONfig_SENSOR_POWER_PIN_02,  
  39.             .gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_02,  
  40.             .gpio_flash = CONfig_SENSOR_FALSH_PIN_02,  
  41.             .gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_02|CONfig_SENSOR_RESETACTIVE_LEVEL_02|CONfig_SENSOR_POWERDNACTIVE_LEVEL_02|CONfig_SENSOR_FLASHACTIVE_LEVEL_02),               
  42.             .dev_name = SENSOR_DEVICE_NAME_02,    
  43.         #else   
  44.             .gpio_reset = INVALID_GPIO, {   
  45.             .gpio_reset = CONfig_SENSOR_RESET_PIN_1,  
  46.             .gpio_power = CONfig_SENSOR_POWER_PIN_1,  
  47.             .gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_1,  
  48.             .gpio_flash = CONfig_SENSOR_FALSH_PIN_1,  
  49.             .gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_1|CONfig_SENSOR_RESETACTIVE_LEVEL_1|CONfig_SENSOR_POWERDNACTIVE_LEVEL_1|CONfig_SENSOR_FLASHACTIVE_LEVEL_1),  
  50.             .dev_name = SENSOR_DEVICE_NAME_1,  
  51.         },{   
  52.         #ifdef CONfig_SENSOR_11   
  53.             .gpio_reset = CONfig_SENSOR_RESET_PIN_11,  
  54.             .gpio_power = CONfig_SENSOR_POWER_PIN_11,  
  55.             .gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_11,  
  56.             .gpio_flash = CONfig_SENSOR_FALSH_PIN_11,  
  57.             .gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_11|CONfig_SENSOR_RESETACTIVE_LEVEL_11|CONfig_SENSOR_POWERDNACTIVE_LEVEL_11|CONfig_SENSOR_FLASHACTIVE_LEVEL_11),  
  58.             .dev_name = SENSOR_DEVICE_NAME_11,  
  59.         #endif           
  60.         }, {   
  61.         #ifdef CONfig_SENSOR_12   
  62.             .gpio_reset = CONfig_SENSOR_RESET_PIN_12,  
  63.             .gpio_power = CONfig_SENSOR_POWER_PIN_12,  
  64.             .gpio_powerdown = CONfig_SENSOR_POWERDN_PIN_12,  
  65.             .gpio_flash = CONfig_SENSOR_FALSH_PIN_12,  
  66.             .gpio_flag = (CONfig_SENSOR_POWERACTIVE_LEVEL_12|CONfig_SENSOR_RESETACTIVE_LEVEL_12|CONfig_SENSOR_POWERDNACTIVE_LEVEL_12|CONfig_SENSOR_FLASHACTIVE_LEVEL_12),  
  67.             .dev_name = SENSOR_DEVICE_NAME_12,  
  68.         #endif   
  69.         }   
  70.     },  
  71.     #ifdef CONfig_VIDEO_RK29_WORK_IPP   
  72.     .meminfo = {   
  73.         .name  = "camera_ipp_mem",  
  74.         .start = MEM_CAMIPP_BASE,  
  75.         .size   = MEM_CAMIPP_SIZE,  
  76.     },  
  77.     #endif   
  78.     .info = {   
  79.         {   
  80.             .dev_name = SENSOR_DEVICE_NAME_0,  
  81.             .orientation = CONfig_SENSOR_ORIENTATION_0,     
  82.         #ifdef CONfig_SENSOR_01   
  83.         },{   
  84.             .dev_name = SENSOR_DEVICE_NAME_01,  
  85.             .orientation = CONfig_SENSOR_ORIENTATION_01,    
  86.         #else   
  87.         },{   
  88.             .dev_name = NULL,  
  89.             .orientation = 0x00,    
  90.         #endif   
  91.         #ifdef CONfig_SENSOR_02   
  92.         },{   
  93.             .dev_name = SENSOR_DEVICE_NAME_02,  
  94.             .orientation = CONfig_SENSOR_ORIENTATION_02,    
  95.         #else   
  96.         },{   
  97.             .dev_name = NULL,  
  98.             .orientation = 0x00,    
  99.         #endif   
  100.         },{   
  101.             .dev_name = SENSOR_DEVICE_NAME_1,  
  102.             .orientation = CONfig_SENSOR_ORIENTATION_1,  
  103.         #ifdef CONfig_SENSOR_11    
  104.         },{   
  105.             .dev_name = SENSOR_DEVICE_NAME_11,  
  106.             .orientation = CONfig_SENSOR_ORIENTATION_11,    
  107.         #endif   
  108.         #ifdef CONfig_SENSOR_12   
  109.         },{   
  110.             .dev_name = SENSOR_DEVICE_NAME_12,  
  111.             .orientation = CONfig_SENSOR_ORIENTATION_12,    
  112.         #endif   
  113.         }   
  114.     }   
  115. };  
  116.   
  117. static u64 rockchip_device_camera_dmamask = 0xffffffffUL;   
  118. static struct resource rk29_camera_resource[] = {   
  119.     [0] = {   
  120.         .start = RK29_VIP_PHYS,  
  121.         .end   = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,  
  122.         .flags = IORESOURCE_MEM,  
  123.     },  
  124.     [1] = {   
  125.         .start = IRQ_VIP,  
  126.         .end   = IRQ_VIP,  
  127.         .flags = IORESOURCE_IRQ,  
  128.     }   
  129. };   
  130.   
  131. /*platform_device : */   
  132. static struct platform_device rk29_device_camera = {   
  133.     .name         = RK29_CAM_DRV_NAME,  
  134.     .id       = RK29_CAM_PLATFORM_DEV_ID,               /* This is used to put cameras on this interface */   
  135.     .num_resources    = ARRAY_SIZE(rk29_camera_resource),  
  136.     .resource     = rk29_camera_resource,  
  137.     .dev            = {   
  138.         .dma_mask = &rockchip_device_camera_dmamask,  
  139.         .coherent_dma_mask = 0xffffffffUL,  
  140.         .platform_data  = &rk29_camera_platform_data,  
  141.     }   
  142. };  

后置摄像头加载参数:
  1. static int rk29_sensor_powerdown(struct device *dev, int on)   
  2. {   
  3.     return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);   
  4. }   
  5. static int rk29_sensor_power(struct device *dev, int on)   
  6. {   
  7.     if (!on)                        /* ddl@rock-chips.com : Ensure sensor enter standby or power off */   
  8.         rk29_sensor_powerdown(dev,1);   
  9.     rk29_sensor_ioctrl(dev,Cam_Power,on);       
  10.     return 0;   
  11. }   
  12. static int rk29_sensor_reset(struct device *dev)   
  13. {   
  14.     rk29_sensor_ioctrl(dev,Cam_Reset,1);   
  15.     msleep(2);   
  16.     rk29_sensor_ioctrl(dev,0);   
  17.     return 0;   
  18. }   
  19.   
  20. #if (CONfig_SENSOR_IIC_ADDR_0 != 0x00)   
  21. static struct i2c_board_info rk29_i2c_cam_info_0[] = {   
  22.     {   
  23.         I2C_BOARD_INFO(SENSOR_NAME_0, CONfig_SENSOR_IIC_ADDR_0>>1)   
  24.     },  
  25. };   
  26.   
  27. static struct soc_camera_link rk29_iclink_0 = {   
  28.     .bus_id     = RK29_CAM_PLATFORM_DEV_ID,  
  29.     .power      = rk29_sensor_power,  
  30. #if (CONfig_SENSOR_RESET_PIN_0 != INVALID_GPIO)   
  31.     .reset      = rk29_sensor_reset,  
  32. #endif       
  33.     .powerdown  = rk29_sensor_powerdown,  
  34.     .board_info = &rk29_i2c_cam_info_0[0],  
  35.     .i2c_adapter_id = CONfig_SENSOR_IIC_ADAPTER_ID_0,  
  36.     .module_name    = SENSOR_NAME_0,  
  37. };   
  38.   
  39. /*platform_device : soc-camera need  */   
  40. static struct platform_device rk29_soc_camera_pdrv_0 = {   
  41.     .name   = "soc-camera-pdrv",  
  42.     .id = 0,  
  43.     .dev    = {   
  44.         .init_name = SENSOR_DEVICE_NAME_0,  
  45.         .platform_data = &rk29_iclink_0,  
  46. };  

前置加载:
  1. #if (CONfig_SENSOR_IIC_ADDR_1 != 0x00)   
  2. static struct i2c_board_info rk29_i2c_cam_info_1[] = {   
  3.     {   
  4.         I2C_BOARD_INFO(SENSOR_NAME_1, CONfig_SENSOR_IIC_ADDR_1>>1)   
  5.     },  
  6. };   
  7.   
  8. static struct soc_camera_link rk29_iclink_1 = {   
  9.     .bus_id     = RK29_CAM_PLATFORM_DEV_ID,  
  10.     .power      = rk29_sensor_power,  
  11. #if (CONfig_SENSOR_RESET_PIN_1 != INVALID_GPIO)   
  12.     .reset      = rk29_sensor_reset,  
  13. #endif         
  14.     .powerdown  = rk29_sensor_powerdown,  
  15.     .board_info = &rk29_i2c_cam_info_1[0],  
  16.     .i2c_adapter_id = CONfig_SENSOR_IIC_ADAPTER_ID_1,  
  17.     .module_name    = SENSOR_NAME_1,  
  18. };   
  19.   
  20. /*platform_device : soc-camera need  */   
  21. static struct platform_device rk29_soc_camera_pdrv_1 = {   
  22.     .name   = "soc-camera-pdrv",  
  23.     .id = 1,  
  24.     .dev    = {   
  25.         .init_name = SENSOR_DEVICE_NAME_1,  
  26.         .platform_data = &rk29_iclink_1,  
  27. };   
  28. #endif  

至于真正的引脚初始化操作,可以根据实际需求来操作引脚:
  1. static int rk29_sensor_io_init(void);   
  2. static int rk29_sensor_io_deinit(int sensor);   
  3. static int rk29_sensor_ioctrl(struct device *dev,int on);   
3.摄像头相关的认参数配置:
  1.   
  2. static int sensor_power_default_cb (struct rk29camera_gpio_res *res, int on)   
  3. {   
  4.     int camera_power = res->gpio_power;   
  5.     int camera_ioflag = res->gpio_flag;   
  6.     int camera_io_init = res->gpio_init;   
  7.     int ret = 0;   
  8.        
  9.     if (camera_power != INVALID_GPIO)  {   
  10.         if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {   
  11.             if (on) {   
  12.                 gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));   
  13.                 dprintk("%s..%s..PowerPin=%d ..PinLevel = %x   \n",__FUNCTION__,res->dev_name, camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));   
  14.                 msleep(10);   
  15.             } else {   
  16.                 gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));   
  17.                 dprintk("%s..%s..PowerPin=%d ..PinLevel = %x   \n", (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));   
  18.             }   
  19.         } else {   
  20.             ret = RK29_CAM_EIO_REQUESTFAIL;   
  21.             printk("%s..%s..PowerPin=%d request Failed!\n",camera_power);   
  22.         }           
  23.     } else {   
  24.         ret = RK29_CAM_EIO_INVALID;   
  25.     }    
  26.   
  27.     return ret;   
  28. }   
  29.   
  30. static int sensor_reset_default_cb (struct rk29camera_gpio_res *res, int on)   
  31. {   
  32.     int camera_reset = res->gpio_reset;   
  33.     int camera_ioflag = res->gpio_flag;   
  34.     int camera_io_init = res->gpio_init;     
  35.     int ret = 0;   
  36.        
  37.     if (camera_reset != INVALID_GPIO) {   
  38.         if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {   
  39.             if (on) {   
  40.                 gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));   
  41.                 dprintk("%s..%s..ResetPin=%d ..PinLevel = %x \n",camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));   
  42.             } else {   
  43.                 gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));   
  44.                 dprintk("%s..%s..ResetPin= %d..PinLevel = %x   \n", camera_reset, (((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));   
  45.             }   
  46.         } else {   
  47.             ret = RK29_CAM_EIO_REQUESTFAIL;   
  48.             printk("%s..%s..ResetPin=%d request Failed!\n",camera_reset);   
  49.         }   
  50.     } else {   
  51.         ret = RK29_CAM_EIO_INVALID;   
  52.     }   
  53.   
  54.     return ret;   
  55. }   
  56.   
  57. static int sensor_powerdown_default_cb (struct rk29camera_gpio_res *res, int on)   
  58. {   
  59.     int camera_powerdown = res->gpio_powerdown;   
  60.     int camera_ioflag = res->gpio_flag;   
  61.     int camera_io_init = res->gpio_init;     
  62.     int ret = 0;       
  63.   
  64.     if (camera_powerdown != INVALID_GPIO) {   
  65.         if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {   
  66.             if (on) {   
  67.                 gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));   
  68.                 dprintk("%s..%s..PowerDownPin=%d ..PinLevel = %x \n",camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));   
  69.             } else {   
  70.                 gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));   
  71.                 dprintk("%s..%s..PowerDownPin= %d..PinLevel = %x   \n", camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));   
  72.             }   
  73.         } else {   
  74.             ret = RK29_CAM_EIO_REQUESTFAIL;   
  75.             dprintk("%s..%s..PowerDownPin=%d request Failed!\n",camera_powerdown);   
  76.         }   
  77.     } else {   
  78.         ret = RK29_CAM_EIO_INVALID;   
  79.     }   
  80.     return ret;   
  81. }   
  82.   
  83.   
  84. static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)   
  85. {   
  86.     int camera_flash = res->gpio_flash;   
  87.     int camera_ioflag = res->gpio_flag;   
  88.     int camera_io_init = res->gpio_init;     
  89.     int ret = 0;       
  90.   
  91.     if (camera_flash != INVALID_GPIO) {   
  92.         if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {   
  93.             switch (on)   
  94.             {   
  95.                 case Flash_Off:   
  96.                 {   
  97.                     gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));   
  98.                     dprintk("\n%s..%s..FlashPin= %d..PinLevel = %x   \n", camera_flash, (((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));    
  99.                     break;   
  100.                 }   
  101.   
  102.                 case Flash_On:   
  103.                 {   
  104.                     gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));   
  105.                     dprintk("%s..%s..FlashPin=%d ..PinLevel = %x \n",camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));   
  106.                     break;   
  107.                 }   
  108.   
  109.                 case Flash_Torch:   
  110.                 {   
  111.                     gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));   
  112.                     dprintk("%s..%s..FlashPin=%d ..PinLevel = %x \n", ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));   
  113.                     break;   
  114.                 }   
  115.   
  116.                 default:   
  117.                 {   
  118.                     printk("%s..%s..Flash command(%d) is invalidate \n",on);   
  119.                     break;   
  120.                 }   
  121.             }   
  122.         } else {   
  123.             ret = RK29_CAM_EIO_REQUESTFAIL;   
  124.             printk("%s..%s..FlashPin=%d request Failed!\n",camera_flash);   
  125.         }   
  126.     } else {   
  127.         ret = RK29_CAM_EIO_INVALID;   
  128.     }   
  129.     return ret;   
  130. }   
  131.   
  132. static void rk29_sensor_fps_get(int idx, unsigned int *val, int w, int h)   
  133. {   
  134.     switch (idx)   
  135.     {   
  136.         case 0:   
  137.         {   
  138.             if ((w==176) && (h==144)) {   
  139.                 *val = CONfig_SENSOR_QCIF_FPS_FIXED_0;   
  140.             #ifdef CONfig_SENSOR_240X160_FPS_FIXED_0   
  141.             } else if ((w==240) && (h==160)) {   
  142.                 *val = CONfig_SENSOR_240X160_FPS_FIXED_0;   
  143.             #endif   
  144.             } else if ((w==320) && (h==240)) {   
  145.                 *val = CONfig_SENSOR_QVGA_FPS_FIXED_0;   
  146.             } else if ((w==352) && (h==288)) {   
  147.                 *val = CONfig_SENSOR_CIF_FPS_FIXED_0;   
  148.             } else if ((w==640) && (h==480)) {   
  149.                 *val = CONfig_SENSOR_VGA_FPS_FIXED_0;   
  150.             } else if ((w==720) && (h==480)) {   
  151.                 *val = CONfig_SENSOR_480P_FPS_FIXED_0;   
  152.             } else if ((w==1280) && (h==720)) {   
  153.                 *val = CONfig_SENSOR_720P_FPS_FIXED_0;   
  154.             }   
  155.             break;   
  156.         }   
  157.         #ifdef CONfig_SENSOR_01   
  158.         case 1:   
  159.         {   
  160.             if ((w==176) && (h==144)) {   
  161.                 *val = CONfig_SENSOR_QCIF_FPS_FIXED_01;   
  162.             #ifdef CONfig_SENSOR_240X160_FPS_FIXED_01   
  163.             } else if ((w==240) && (h==160)) {   
  164.                 *val = CONfig_SENSOR_240X160_FPS_FIXED_01;   
  165.             #endif   
  166.             } else if ((w==320) && (h==240)) {   
  167.                 *val = CONfig_SENSOR_QVGA_FPS_FIXED_01;   
  168.             } else if ((w==352) && (h==288)) {   
  169.                 *val = CONfig_SENSOR_CIF_FPS_FIXED_01;   
  170.             } else if ((w==640) && (h==480)) {   
  171.                 *val = CONfig_SENSOR_VGA_FPS_FIXED_01;   
  172.             } else if ((w==720) && (h==480)) {   
  173.                 *val = CONfig_SENSOR_480P_FPS_FIXED_01;   
  174.             } else if ((w==1280) && (h==720)) {   
  175.                 *val = CONfig_SENSOR_720P_FPS_FIXED_01;   
  176.             }   
  177.             break;   
  178.         }   
  179.         #endif   
  180.         #ifdef CONfig_SENSOR_02   
  181.         case 2:   
  182.         {   
  183.             if ((w==176) && (h==144)) {   
  184.                 *val = CONfig_SENSOR_QCIF_FPS_FIXED_02;   
  185.             #ifdef CONfig_SENSOR_240X160_FPS_FIXED_02   
  186.             } else if ((w==240) && (h==160)) {   
  187.                 *val = CONfig_SENSOR_240X160_FPS_FIXED_02;   
  188.             #endif   
  189.             } else if ((w==320) && (h==240)) {   
  190.                 *val = CONfig_SENSOR_QVGA_FPS_FIXED_02;   
  191.             } else if ((w==352) && (h==288)) {   
  192.                 *val = CONfig_SENSOR_CIF_FPS_FIXED_02;   
  193.             } else if ((w==640) && (h==480)) {   
  194.                 *val = CONfig_SENSOR_VGA_FPS_FIXED_02;   
  195.             } else if ((w==720) && (h==480)) {   
  196.                 *val = CONfig_SENSOR_480P_FPS_FIXED_02;   
  197.             } else if ((w==1280) && (h==720)) {   
  198.                 *val = CONfig_SENSOR_720P_FPS_FIXED_02;   
  199.             }   
  200.             break;   
  201.         }   
  202.         #endif   
  203.            
  204.         case 3:   
  205.         {   
  206.             if ((w==176) && (h==144)) {   
  207.                 *val = CONfig_SENSOR_QCIF_FPS_FIXED_1;   
  208.             #ifdef CONfig_SENSOR_240X160_FPS_FIXED_1   
  209.             } else if ((w==240) && (h==160)) {   
  210.                 *val = CONfig_SENSOR_240X160_FPS_FIXED_1;   
  211.             #endif   
  212.             } else if ((w==320) && (h==240)) {   
  213.                 *val = CONfig_SENSOR_QVGA_FPS_FIXED_1;   
  214.             } else if ((w==352) && (h==288)) {   
  215.                 *val = CONfig_SENSOR_CIF_FPS_FIXED_1;   
  216.             } else if ((w==640) && (h==480)) {   
  217.                 *val = CONfig_SENSOR_VGA_FPS_FIXED_1;   
  218.             } else if ((w==720) && (h==480)) {   
  219.                 *val = CONfig_SENSOR_480P_FPS_FIXED_1;   
  220.             } else if ((w==1280) && (h==720)) {   
  221.                 *val = CONfig_SENSOR_720P_FPS_FIXED_1;   
  222.             }   
  223.             break;   
  224.         }   
  225.         #ifdef CONfig_SENSOR_11   
  226.         case 4:   
  227.         {   
  228.             if ((w==176) && (h==144)) {   
  229.                 *val = CONfig_SENSOR_QCIF_FPS_FIXED_11;   
  230.             #ifdef CONfig_SENSOR_240X160_FPS_FIXED_11   
  231.             } else if ((w==240) && (h==160)) {   
  232.                 *val = CONfig_SENSOR_240X160_FPS_FIXED_11;   
  233.             #endif   
  234.             } else if ((w==320) && (h==240)) {   
  235.                 *val = CONfig_SENSOR_QVGA_FPS_FIXED_11;   
  236.             } else if ((w==352) && (h==288)) {   
  237.                 *val = CONfig_SENSOR_CIF_FPS_FIXED_11;   
  238.             } else if ((w==640) && (h==480)) {   
  239.                 *val = CONfig_SENSOR_VGA_FPS_FIXED_11;   
  240.             } else if ((w==720) && (h==480)) {   
  241.                 *val = CONfig_SENSOR_480P_FPS_FIXED_11;   
  242.             } else if ((w==1280) && (h==720)) {   
  243.                 *val = CONfig_SENSOR_720P_FPS_FIXED_11;   
  244.             }   
  245.             break;   
  246.         }   
  247.         #endif   
  248.         #ifdef CONfig_SENSOR_12   
  249.         case 5:   
  250.         {   
  251.             if ((w==176) && (h==144)) {   
  252.                 *val = CONfig_SENSOR_QCIF_FPS_FIXED_12;   
  253.             #ifdef CONfig_SENSOR_240X160_FPS_FIXED_12   
  254.             } else if ((w==240) && (h==160)) {   
  255.                 *val = CONfig_SENSOR_240X160_FPS_FIXED_12;   
  256.             #endif   
  257.             } else if ((w==320) && (h==240)) {   
  258.                 *val = CONfig_SENSOR_QVGA_FPS_FIXED_12;   
  259.             } else if ((w==352) && (h==288)) {   
  260.                 *val = CONfig_SENSOR_CIF_FPS_FIXED_12;   
  261.             } else if ((w==640) && (h==480)) {   
  262.                 *val = CONfig_SENSOR_VGA_FPS_FIXED_12;   
  263.             } else if ((w==720) && (h==480)) {   
  264.                 *val = CONfig_SENSOR_480P_FPS_FIXED_12;   
  265.             } else if ((w==1280) && (h==720)) {   
  266.                 *val = CONfig_SENSOR_720P_FPS_FIXED_12;   
  267.             }   
  268.             break;   
  269.         }   
  270.         #endif   
  271.         default:   
  272.             printk(KERN_ERR"rk29_cam_io: sensor-%d have not been define in board file!",idx);   
  273.     }   
  274. }  
这里面包括图片尺寸大小,分辨率等设置。
4.具体摄像头的寄存器配置:
首先:make menuconfig

           Device Drivers------>

Multimedia support ----->

Video capture adapters ----->

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

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


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

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

相关文章

  译序:JWMediaPlayer是开源的网页使用的Flash播放器。本...
    Flash编程原理都是只能将1写为0,而不能将0写成1.所...
 上传setenvgatewayip192.168.1.1;setenvserverip192.168.1...
Error:FlashDownloadFailed-"Cortex-M3"出现一般有...
jPlayer是一个用于控制和播放mp3文件的jQuery插件。它在后台...
#ifndef__FONTUPD_H__#define__FONTUPD_H__#include"sy...