RK29 Camare移植--内核部分

来源:互联网 发布:linux下安装中文字体 编辑:程序博客网 时间:2024/04/29 22:22
1444人阅读 评论(2)收藏 举报
camstructflashfunctionionull

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

[cpp] view plaincopy
  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如下所示:
[cpp] view plaincopy
  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,初始化操作:
[cpp] view plaincopy
  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.             .gpio_init = 0,               
  34.             .dev_name = NULL,   
  35.         #endif   
  36.         }, {   
  37.         #ifdef CONFIG_SENSOR_02   
  38.             .gpio_reset = CONFIG_SENSOR_RESET_PIN_02,   
  39.             .gpio_power = CONFIG_SENSOR_POWER_PIN_02,   
  40.             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_02,   
  41.             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_02,   
  42.             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_02|CONFIG_SENSOR_RESETACTIVE_LEVEL_02|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_02|CONFIG_SENSOR_FLASHACTIVE_LEVEL_02),   
  43.             .gpio_init = 0,               
  44.             .dev_name = SENSOR_DEVICE_NAME_02,    
  45.         #else   
  46.             .gpio_reset = INVALID_GPIO,   
  47.             .gpio_power = INVALID_GPIO,   
  48.             .gpio_powerdown = INVALID_GPIO,   
  49.             .gpio_flash = INVALID_GPIO,   
  50.             .gpio_flag = 0,   
  51.             .gpio_init = 0,               
  52.             .dev_name = NULL,   
  53.         #endif   
  54.         }, {   
  55.             .gpio_reset = CONFIG_SENSOR_RESET_PIN_1,   
  56.             .gpio_power = CONFIG_SENSOR_POWER_PIN_1,   
  57.             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_1,   
  58.             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_1,   
  59.             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_1|CONFIG_SENSOR_RESETACTIVE_LEVEL_1|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1|CONFIG_SENSOR_FLASHACTIVE_LEVEL_1),   
  60.             .gpio_init = 0,   
  61.             .dev_name = SENSOR_DEVICE_NAME_1,   
  62.         },{   
  63.         #ifdef CONFIG_SENSOR_11   
  64.             .gpio_reset = CONFIG_SENSOR_RESET_PIN_11,   
  65.             .gpio_power = CONFIG_SENSOR_POWER_PIN_11,   
  66.             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_11,   
  67.             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_11,   
  68.             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_11|CONFIG_SENSOR_RESETACTIVE_LEVEL_11|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_11|CONFIG_SENSOR_FLASHACTIVE_LEVEL_11),   
  69.             .gpio_init = 0,   
  70.             .dev_name = SENSOR_DEVICE_NAME_11,   
  71.         #else   
  72.             .gpio_reset = INVALID_GPIO,   
  73.             .gpio_power = INVALID_GPIO,   
  74.             .gpio_powerdown = INVALID_GPIO,   
  75.             .gpio_flash = INVALID_GPIO,   
  76.             .gpio_flag = 0,   
  77.             .gpio_init = 0,               
  78.             .dev_name = NULL,   
  79.         #endif           
  80.         }, {   
  81.         #ifdef CONFIG_SENSOR_12   
  82.             .gpio_reset = CONFIG_SENSOR_RESET_PIN_12,   
  83.             .gpio_power = CONFIG_SENSOR_POWER_PIN_12,   
  84.             .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_12,   
  85.             .gpio_flash = CONFIG_SENSOR_FALSH_PIN_12,   
  86.             .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_12|CONFIG_SENSOR_RESETACTIVE_LEVEL_12|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_12|CONFIG_SENSOR_FLASHACTIVE_LEVEL_12),   
  87.             .gpio_init = 0,   
  88.             .dev_name = SENSOR_DEVICE_NAME_12,   
  89.         #else   
  90.             .gpio_reset = INVALID_GPIO,   
  91.             .gpio_power = INVALID_GPIO,   
  92.             .gpio_powerdown = INVALID_GPIO,   
  93.             .gpio_flash = INVALID_GPIO,   
  94.             .gpio_flag = 0,   
  95.             .gpio_init = 0,               
  96.             .dev_name = NULL,   
  97.         #endif   
  98.         }   
  99.     },   
  100.     #ifdef CONFIG_VIDEO_RK29_WORK_IPP   
  101.     .meminfo = {   
  102.         .name  = "camera_ipp_mem",   
  103.         .start = MEM_CAMIPP_BASE,   
  104.         .size   = MEM_CAMIPP_SIZE,   
  105.     },   
  106.     #endif   
  107.     .info = {   
  108.         {   
  109.             .dev_name = SENSOR_DEVICE_NAME_0,   
  110.             .orientation = CONFIG_SENSOR_ORIENTATION_0,     
  111.         #ifdef CONFIG_SENSOR_01   
  112.         },{   
  113.             .dev_name = SENSOR_DEVICE_NAME_01,   
  114.             .orientation = CONFIG_SENSOR_ORIENTATION_01,    
  115.         #else   
  116.         },{   
  117.             .dev_name = NULL,   
  118.             .orientation = 0x00,    
  119.         #endif   
  120.         #ifdef CONFIG_SENSOR_02   
  121.         },{   
  122.             .dev_name = SENSOR_DEVICE_NAME_02,   
  123.             .orientation = CONFIG_SENSOR_ORIENTATION_02,    
  124.         #else   
  125.         },{   
  126.             .dev_name = NULL,   
  127.             .orientation = 0x00,    
  128.         #endif   
  129.         },{   
  130.             .dev_name = SENSOR_DEVICE_NAME_1,   
  131.             .orientation = CONFIG_SENSOR_ORIENTATION_1,   
  132.         #ifdef CONFIG_SENSOR_11    
  133.         },{   
  134.             .dev_name = SENSOR_DEVICE_NAME_11,   
  135.             .orientation = CONFIG_SENSOR_ORIENTATION_11,    
  136.         #else   
  137.         },{   
  138.             .dev_name = NULL,   
  139.             .orientation = 0x00,    
  140.         #endif   
  141.         #ifdef CONFIG_SENSOR_12   
  142.         },{   
  143.             .dev_name = SENSOR_DEVICE_NAME_12,   
  144.             .orientation = CONFIG_SENSOR_ORIENTATION_12,    
  145.         #else   
  146.         },{   
  147.             .dev_name = NULL,   
  148.             .orientation = 0x00,    
  149.         #endif   
  150.         }   
  151.     }   
  152. };  
  153.   
  154. static u64 rockchip_device_camera_dmamask = 0xffffffffUL;   
  155. static struct resource rk29_camera_resource[] = {   
  156.     [0] = {   
  157.         .start = RK29_VIP_PHYS,   
  158.         .end   = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,   
  159.         .flags = IORESOURCE_MEM,   
  160.     },   
  161.     [1] = {   
  162.         .start = IRQ_VIP,   
  163.         .end   = IRQ_VIP,   
  164.         .flags = IORESOURCE_IRQ,   
  165.     }   
  166. };   
  167.   
  168. /*platform_device : */   
  169. static struct platform_device rk29_device_camera = {   
  170.     .name         = RK29_CAM_DRV_NAME,   
  171.     .id       = RK29_CAM_PLATFORM_DEV_ID,               /* This is used to put cameras on this interface */   
  172.     .num_resources    = ARRAY_SIZE(rk29_camera_resource),   
  173.     .resource     = rk29_camera_resource,   
  174.     .dev            = {   
  175.         .dma_mask = &rockchip_device_camera_dmamask,   
  176.         .coherent_dma_mask = 0xffffffffUL,   
  177.         .platform_data  = &rk29_camera_platform_data,   
  178.     }   
  179. };  

后置摄像头加载参数:
[cpp] view plaincopy
  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,Cam_Reset,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.     },   
  47. };  

前置加载:
[cpp] view plaincopy
  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. };   
  29. #endif  

至于真正的引脚初始化操作,可以根据实际需求来操作引脚:
[cpp] view plaincopy
  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);   
3.摄像头相关的默认参数配置:
[cpp] view plaincopy
  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",__FUNCTION__,res->dev_name, camera_power, (((~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",__FUNCTION__,res->dev_name,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",__FUNCTION__,res->dev_name,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",__FUNCTION__,res->dev_name, 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",__FUNCTION__,res->dev_name,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",__FUNCTION__,res->dev_name,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",__FUNCTION__,res->dev_name, 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",__FUNCTION__,res->dev_name,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",__FUNCTION__,res->dev_name, 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",__FUNCTION__,res->dev_name,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",__FUNCTION__,res->dev_name,camera_flash, ((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",__FUNCTION__,res->dev_name,on);   
  119.                     break;   
  120.                 }   
  121.             }   
  122.         } else {   
  123.             ret = RK29_CAM_EIO_REQUESTFAIL;   
  124.             printk("%s..%s..FlashPin=%d request failed!\n",__FUNCTION__,res->dev_name,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里面初始化的配置

0 0