MTK 6735平台 低电量强开闪光灯

 原本闪光灯低于15%电量将不开启,客户要求闪光灯5%电量均开启,需修改代码。上层查阅camera、flash相关代码,未发现低电压禁止闪光灯代码,交由驱动进行修改。
    因没有做过类似修改,不知在何处修改,才可以修改限制电量。在网友中询问,有热心网友给出答案:MTK平台要在HAL层 flash_mgr_m.cpp文件中进行修改,isLow的那一段都注掉,需要修改4处:
     按照此说法,在vendor目录下查找此文件,结果如下:

    存在文件过多,询问过热心网友,得知只有core目录下代码起作用,故只查看 mtkcam/D1/core/featureio/pipe/aaa/flash_mgr/flash_mgr_m.cpp代码。
在此代码中搜索 isLowPower,发现如下:

     跟踪 sendCommandRet 方法,其内部结构如下:
     
     继续跟踪 sendCommandRet_nolock 方法,其内部结构如下:
           
     跟踪查看代码,发现 其内部最终调用 ioctl 函数,调用到了驱动层,其余动作均在驱动层进行,调用   sendCommandRet 方法时,传入命令为FLASH_IOC_IS_LOW_POWER,在kernel中搜索该命令:

       发现只在drivers/misc/mediatek/flashlight/src/mt6735/kd_flashlightlist.c 文件中有此命令存在,跟踪此代码:

         发现此代码只是根据 gLowPowerPer 、 gLowPowerVbat 两个全局变量的类型,来返回对应值的。在此文件中搜索这两个变量,发现如下:


            此两个函数会设置  gLowPowerPer 、 gLowPowerVbat 两个全局变量的值,跟踪此两个函数,发现在  flashlight_init 函数中发现两个函数被调用:
 
         跟踪 register_low_battery_notify 函数,未发现有执行相关代码的函数,如下:
           跟踪 register_battery_percent_notify  函数,未发现有执行相关代码的函数,如下:
           
           发现,此函数是根据 g_battery_percent_stop 、g_battery_percent_level 两个来执行传入的函数的,在传入的函数中,会设置  gLowPowerVbat 变量,导致 ioct 函数执行到  FLASH_IOC_IS_LOW_POWER 命令时返回为1,关闭闪光灯。搜索   g_battery_percent_stop 、g_battery_percent_level 两个关键字,仅发现在 bat_percent_notify_handler 线程(drivers/misc/mediatek/power/mt6735/pmic.c)中,有如下代码:

此代码中,先获取ui电量百分比,然后与 BAT_PERCENT_LINIT 宏进行比较,再设置全局变量  g_battery_percent_level 的,怀疑  BAT_PERCENT_LINIT 宏为控制低压闪光灯是否开启的阀值,跟踪该宏,发现:
 
       此值与目前闪光灯现象一致(电量低于15%不能开启闪光灯),故怀疑只需更改此值即可修改低压关闭闪光灯阀值。
       将此值修改为5,编译版本进行验证,验证OK。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值