Tegra平台back camera 驱动实现六

添加一个camera

   分析完了camera HAL的实现流程,我们就开始尝试着添加这么一个camera,具体的是在目录vendor/nvidia/tegra/odm/ventana/下,现在添加一个camera及其驱动,主要步骤如下:

定义标识序列

        vendor/nvidia/tegra/odm/ventana/odm_kit/query/include/nvodm_query_discovery_imager.h

        定义一个标识序列,例如:

C/C++代码
  1. #define SENSOR_YUV_GUID             NV_ODM_GUID('s', '_', 'S', 'M', 'P', 'Y', 'U', 'V')  
  2. #define SENSOR_YUV5_GUID            NV_ODM_GUID('s', '_', 'S', 'M', 'P', 'Y', 'U', '5')  
配置camera硬件连接参数

        odm_kit/query/subboards/ nvodm_query_discovery_pm275_addresses.h

        配置camera的硬件连接参数,如:

C/C++代码
  1. #define QQ1234_PINS (NVODM_CAMERA_DEVICE_IS_DEFAULT)  
  2. static const NvOdmIoAddress s_ffaImagerQQ1234Addresses[] =  
  3. {  
  4. I2C配置;  
  5. Reset GPIO 配置;  
  6. powerdown GPIO 配置;  
  7. Camera VDD 配置;  
  8. VCSI 配置;  
  9. Video input 配置;  
  10. external Clock (CSUS)配置;  
  11. };  
  12.   
  13. #define OV5650_PINS (NVODM_CAMERA_SERIAL_CSI_D1A | \  
  14.                      NVODM_CAMERA_DEVICE_IS_DEFAULT)  
  15. static const NvOdmIoAddress s_ffaImagerOV5650Addresses[] =  
  16. {  
  17.     { NvOdmIoModule_I2c,  0x0, 0x6C },  
  18.     { NvOdmIoModule_VideoInput, 0x00, OV5650_PINS },  
  19.     { NvOdmIoModule_ExternalClock, 2, 0 } // CSUS  
  20. };  

        本文中:

C/C++代码
  1. static const NvOdmIoAddress s_ffaImagerSensorYUVAddresses[] =  
  2. {  
  3.     { NvOdmIoModule_ExternalClock, 2, 0 } // CSUS  
  4. };  
  5. //END_END  
  6.   
  7. //COMPXX_START Sandow  
  8. static const NvOdmIoAddress s_ffaImagerSensorYUV5Addresses[] =  
  9. {  
  10.     { NvOdmIoModule_ExternalClock, 2, 0 } // CSUS  
  11. };  
关联camera设备入口地址和GUID

        odm_kit/query/subboards/ nvodm_query_discovery_pm275_peripherals.h

        camera设备入口地址同GUID关联:

C/C++代码
  1. //Sandow Imager Primary  
  2. #if CONFIG_I_LOVE_XX  
  3. {  
  4.     SENSOR_YUV5_GUID,  
  5.     s_ffaImagerSensorYUV5Addresses,  
  6.     NV_ARRAY_SIZE(s_ffaImagerSensorYUV5Addresses),  
  7.     NvOdmPeripheralClass_Imager  
  8. },  
  9. // Imager - Secondary  
  10. {  
  11.     SENSOR_YUV_GUID,  
  12.     s_ffaImagerSensorYUVAddresses,  
  13.     NV_ARRAY_SIZE(s_ffaImagerSensorYUVAddresses),  
  14.     NvOdmPeripheralClass_Imager  
  15. },  
在Android.mk文件中添加相应files

        vendor/nvidia/tegra/odm/template/odm_kit/adaptations/imager/Android.mk

C/C++代码
  1. LOCAL_SRC_FILES += sensor_yuv.c  
  2. LOCAL_SRC_FILES += sensor_yuv5.c  
添加HAL层枚举的camera类型

        vendor/nvidia/tegra/odm/template/odm_kit/adaptations/imager/imager_hal.c

        添加Hal层会枚举的camera类型如下:

C/C++代码
  1. #include "sensor_yuv.h"  
  2. #include "sensor_yuv5.h"  
  3. DeviceHalTable g_SensorHalTable[] ={  
  4. ....  
  5. {SENSOR_YUV_GUID,            SensorYuv_GetHal},  
  6. {SENSOR_YUV5_GUID,           SensorYuv5_GetHal},  
  7. ....  
  8. };  
camera设备的配置和功能的具体实现

        vendor/nvidia/tegra/odm/template/odm_kit/adaptations/imager/ sensor_yuv.c

        vendor/nvidia/tegra/odm/template/odm_kit/adaptations/imager/ sensor_yuv5.c

        NvBool SensorYuv_GetHal(NvOdmImagerHandle hImager);

        这是对camera设备的配置和功能的具体实现的文件。硬件校准之类的工作主要就是修改sensor_yuv.c(front camera)和sensor_yuv5.c(back camera)

C/C++代码
  1. NvBool SensorYuv_GetHal(NvOdmImagerHandle hImager)  
  2. {  
  3.     if (!hImager || !hImager->pSensor)  
  4.         return NV_FALSE;  
  5.   
  6.     hImager->pSensor->pfnOpen = SensorYuv_Open;  
  7.     hImager->pSensor->pfnClose = SensorYuv_Close;  
  8.     hImager->pSensor->pfnGetCapabilities = SensorYuv_GetCapabilities;  
  9.     hImager->pSensor->pfnListModes = SensorYuv_ListModes;  
  10.     hImager->pSensor->pfnSetMode = SensorYuv_SetMode;  
  11.     hImager->pSensor->pfnSetPowerLevel = SensorYuv_SetPowerLevel;  
  12.     hImager->pSensor->pfnGetPowerLevel = SensorYuv_GetPowerLevel;  
  13.     hImager->pSensor->pfnSetParameter = SensorYuv_SetParameter;  
  14.     hImager->pSensor->pfnGetParameter = SensorYuv_GetParameter;  
  15.     return NV_TRUE;  
  16. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值