MTK camera 闪光灯Flashlight驱动调试流程

本文详细解析了CameraFlash驱动的工作原理及其实现过程,包括设备注册、HAL层接口交互、闪光灯模式控制等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Camera Flash 驱动分析

一、Flash驱动涉及到的文件包含

mediatek /custom/common/kernel/flashlight/src/kd_flashlightlist.c

mediatek /custom/huaqin_bsp/at808p/base/kernel/flashlight/constant_flashlight/leds_strobe.c

mediatek /platform/mt6592/hardware/mtkcam/core/featureio/drv/strobe/flashlight_drv.cpp

mediatek/platform/mt6592/hardware/mtkcam/core/featureio/pipe/aaa/flash_mgr/flash_mgr.cpp

mediatek/platform/mt6592/hardware/mtkcam/core/featureio/pipe/aaa/flash_mgr/flash_cct.cpp

mediatek/platform/mt6592/hardware/mtkcam/acdk/src/cct/if/cct_feature.cpp

二、Flash驱动代码流程分析:

i.             mediatek /custom/common/kernel/flashlight/src/kd_flashlightlist.c

主要完成设备的注册和初始化。

1.注册一个平台设备:名为"kd_camera_flashlight";

2.注册一个平台驱动,name和我们的devices name同名,这个名字主要用来和HAL层的name做匹配用;

3.对IOCTL的一个填充,供HAL调用;

4.做一个接口主要跟我们实际使用的Flash驱动对接,以kdFlashlightList罗列出来;

ii.             mediatek/custom/huaqin_bsp/at808p/base/kernel/flashlight/constant_flashlight/leds_strobe.c

1.      这个文件就是我们实际性的使用的Flash驱动文件,从

mediatek/config/huaqin92_wet_b2a_tdd/xxx/ProjectConfig.mk文件中CUSTOM_KERNEL_FLASHLIGHT配置获取具体使用的Flash驱动。

如:

CUSTOM_HAL_FLASHLIGHT= constant_flashlight

CUSTOM_KERNEL_FLASHLIGHT = constant_flashlight

2.      该文件和kd_flashlightlist.c文件的对接函数为: 

323 MUINT32constantFlashlightInit(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc)

3.      这个文件完成的任务是填充以下几个函数:

  1. 315FLASHLIGHT_FUNCTION_STRUCT constantFlashlightFunc=  
  2. 316{   
  3. 317     constant_flashlight_open,  
  4. 318     constant_flashlight_release,  
  5. 319     constant_flashlight_ioctl  
  6. 320 };  

4.      我们主要分析的是constant_flashlight_ioctl,以为这是跟HAL实际握手的接口。

 

iii.             mediatek/platform/mt6592/hardware/mtkcam/core/featureio/drv/strobe/flashlight_drv.cpp

这个文件完成的任务比较多,主要是一些类的实现和定义。

  1. 825 intFlashlightDrv::setFlashlightModeConf(unsigned long a_strobeMode)  
  2. 897 intFlashlightDrv::setCaptureFlashlightConf(unsigned long a_strobeWidth)  
  3. 952 intFlashlightDrv::setCaptureDelay(unsigned int value)  
  4. 1021 intFlashlightDrv::getDuty(int* duty)  
  5. 1090 intFlashlightDrv::lowPowerDetectEnd(int* isLowPower)  

主要是为flash_mgr.cpp提供接口。

                      

iv.             mediatek/platform/mt6592/hardware/mtkcam/core/featureio/pipe/aaa/flash_mgr/flash_mgr.cpp

实现闪光灯模式的设置和获取、拍照/摄像预览的开启和终止、闪光灯设备的打开和关闭等等。

  1. 1479 void FlashMgr::setTorchOnOff(int en)  
  2. 2276 intFlashMgr::setFlashMode(int mode)  

v.             mediatek/platform/mt6592/hardware/mtkcam/core/featureio/pipe/aaa/flash_mgr/flash_cct.cpp

调用lash_mgr.cpp中的函数来给cct_feature.cpp提供接口。

  1. 128 int FlashMgr::cctFlashEnable(int en)  
  2. 129 {  
  3. 130    LogInfo("cctFlashEnable(en=%d) line=%d",en,__LINE__);  
  4. 131     if(en==1)  
  5. 132     {  
  6. 133        setFlashMode(FLASHLIGHT_FORCE_ON);  
  7. 134     }  
  8. 135     else  
  9. 136     {  
  10. 137        setFlashMode(FLASHLIGHT_FORCE_OFF);  
  11. 138     }  
  12. 139     return 0;  
  13. 140 }  

vi.             mediatek/platform/mt6592/hardware/mtkcam/acdk/src/cct/if/cct_feature.cpp

调用flash_cct.cpp中的函数,并以IOCTL的形式进行封装,供更上一层次调用。具体的没有在继续跟下去,有兴趣的话,可以再往上分析分析。

  1. MINT32 CctImp::aaaCCTFeatureControl  
  2. 361    case ACDK_CCT_OP_FLASH_ENABLE:  
  3. 362        err = FlashMgr::getInstance()->cctFlashEnable(1); //YosenFlash  
  4. 363        break;  
  5. 364    case ACDK_CCT_OP_FLASH_DISABLE:  
  6. 365        err = FlashMgr::getInstance()->cctFlashEnable(0); //YosenFlash  
<think>好的,我需要处理用户关于MTK平台闪光灯快速校准方法的询问。首先,我要回顾用户提供的引用资料,看看是否有相关信息。 用户提供的引用[1]、[2]、[3]、[4]主要涉及MTK平台闪光灯驱动的配置和调试,比如GPIO设置、PWM模式调整、wakelock使用等。虽然这些资料没有直接提到“快速校准”的具体步骤,但可能相关的配置和调试方法可以间接用于校准。 接下来,我需要确定MTK平台常见的校准方法。通常,硬件校准可能涉及电流、电压的调整,软件层面可能通过配置文件或算法进行参数优化。例如,引用[2]提到的flash_tuning_custom.cpp可能用于调节闪光灯参数,引用[3]中的GPIO设置可能影响闪光灯的控制。 用户可能需要了解如何通过现有驱动配置实现快速校准。因此,我需要结合现有引用资料,归纳可能的校准步骤,如修改配置文件、调整GPIO/PWM参数、使用校准工具等。同时,需要指出可能需要参考MTK官方文档或联系技术支持获取更详细的校准方法。 最后,生成相关问题,帮助用户深入探索,例如询问校准工具的使用、参数优化方法或常见问题处理。</think>### MTK平台闪光灯快速校准方法 根据MTK平台的驱动调试流程,快速校准主要涉及硬件参数调整与软件配置配合。以下是基于现有资料的整理步骤: 1. **硬件参数校准** - 在`ProjectConfig.mk`中确认闪光灯类型配置(如恒定电流模式): ``` CUSTOM_HAL_FLASHLIGHT = constant_flashlight CUSTOM_KERNEL_FLASHLIGHT = constant_flashlight ``` 此配置确保驱动与硬件匹配[^3]。 - 通过`DrvGen.exe`工具设置控制闪光灯的GPIO引脚,例如: ``` #define GPIO_CAMERA_FLASH_EN_PIN (GPIO63 | 0x80000000) ``` 确保GPIO控制信号正确输出[^3]。 2. **软件参数调优** - 在`flash_tuning_custom.cpp`中调整亮度参数: ```cpp // 示例:设置最大电流值(单位mA) static FLASH_TUNING_PARA para = { .maxCurrent = 1000 }; ``` 此文件直接影响闪光灯的输出强度[^2]。 - 若使用PWM控制模式,需修改GPIO为PWM功能并配置占空比,例如: ```c // 将GPIO63切换为PWM模式 pwm_set_spec_config(PWM_LED_FLASH, duty_cycle); ``` 需结合wakelock防止休眠导致闪光灯异常关闭[^4]。 3. **快速校准工具使用** MTK可能提供`Flashlight Tool`或`ATE Utility`等工具,通过自动化脚本批量测试不同电流/PWM参数组合,快速确定最优值。具体路径通常位于`vendor/mediatek/proprietary/tools/`目录下[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值