当前位置: 首页 > news >正文

灭屏取消过温减流功能

01> thermal温度检测处理函数:kernel-3.18/drivers/misc/mediatek/thermal/common/coolers/mtk_cooler_bcct.c

static void mtk_cl_bcct_set_bcct_limit(void)
{
    /* TODO: optimize */
    int i = 0;
    int min_limit = 65535;

    for (; i < MAX_NUM_INSTANCE_MTK_COOLER_BCCT; i++) {
        unsigned long curr_state;

        MTK_CL_BCCT_GET_CURR_STATE(curr_state, cl_bcct_state[i]);
        if (1 == curr_state) {

            int limit;

            MTK_CL_BCCT_GET_LIMIT(limit, cl_bcct_state[i]); //计算温度对应电流函数A;
            if ((min_limit > limit) && (limit > 0))
                min_limit = limit;
        }
    }

    if (min_limit != cl_bcct_cur_limit) {
        cl_bcct_cur_limit = min_limit;

        if (65535 <= cl_bcct_cur_limit) {    //mtk默认65000,也就是函数A值小于该值走else;
            set_bat_charging_current_limit(-1);   //line_charging中减流实际动作函数;
            mtk_cooler_bcct_dprintk_always("mtk_cl_bcct_set_bcct_limit() limit=-1\n");
        } else {
                set_bat_charging_current_limit(cl_bcct_cur_limit); //走此
            mtk_cooler_bcct_dprintk_always("mtk_cl_bcct_set_bcct_limit() limit=%d\n",
                               cl_bcct_cur_limit);
        }

        mtk_cooler_bcct_dprintk_always("mtk_cl_bcct_set_bcct_limit() real limit=%d\n",
                           get_bat_charging_current_level() / 100);

    }
}

 ---

在 thermal.conf表中打开过温检测后,该程序10s扫描2次,周一5秒;

在:

static int mtk_cl_bcct_set_cur_state(struct thermal_cooling_device *cdev, unsigned long state)
{
    mtk_cooler_bcct_dprintk("mtk_cl_bcct_set_cur_state() %s %lu\n", cdev->type, state);
    printk("mtk_cl_bcct_set_cur_state() %s %lu\n", cdev->type, state);  //state为软件部分判断温度后识别值,传入kernel;(值为0,1)
    MTK_CL_BCCT_SET_CURR_STATE(state, *((unsigned long *)cdev->devdata));
    mtk_cl_bcct_set_bcct_limit();                                                                                                    
    mtk_cooler_bcct_dprintk("mtk_cl_bcct_set_cur_state() %s limit=%d\n", cdev->type,
                get_bat_charging_current_level() / 100);

    return 0;
}

 

02>line_charging中:

①引入lcm亮度检测函数:

extern unsigned int mt_get_bl_brightness(void);

 

 

②对set_bat_charging_current_limit()函数处理:

unsigned int set_bat_charging_current_limit(int current_limit)
{
    battery_log(BAT_LOG_CRTI, "[BATTERY] set_bat_charging_current_limit (%d)\r\n",
            current_limit);

    if (current_limit != -1) {
        g_bcct_flag = 1;

        if (current_limit < 70)
            g_temp_CC_value = CHARGE_CURRENT_0_00_MA;
        else if (current_limit < 200)
            g_temp_CC_value = CHARGE_CURRENT_70_00_MA;

 

改为:

unsigned int set_bat_charging_current_limit(int current_limit)
{
    battery_log(BAT_LOG_CRTI, "[BATTERY] set_bat_charging_current_limit (%d)\r\n",
            current_limit);

    if ( (current_limit != -1) && (mt_get_bl_brightness() != 0) )
    {
        g_bcct_flag = 1;

        if (current_limit < 70)
            g_temp_CC_value = CHARGE_CURRENT_0_00_MA;
        else if (current_limit < 200)
            g_temp_CC_value = CHARGE_CURRENT_70_00_MA;
        else if (current_limit < 300)

 

 log:

<3>[  730.985645]  (0)[181:bat_thread_kthr]AvgVbat=(3761,3896),AvgI=(688,1029),VChr=5213,AvgT=(25,25),SOC=(3,3),UI_SOC=3,ZCV=3777 bcct:0:0 I:120000

 

---

<3>[  812.105116]  (0)[181:bat_thread_kthr]AvgVbat=(3783,3790),AvgI=(688,573),VChr=5166,AvgT=(25,25),SOC=(4,4),UI_SOC=4,ZCV=3738 bcct:1:0 I:65000

 

---

 

<7>[ 1201.987442]  (0)[4115:kworker/0:0][name:mtk_cooler_bcct&][thermal/cooler/bcct]mtk_cl_bcct_set_bcct_limit() limit=650
<7>[ 1201.987461]  (0)[4115:kworker/0:0][name:mtk_cooler_bcct&][thermal/cooler/bcct]mtk_cl_bcct_set_bcct_limit() real limit=1200

 

 --

 -

adb shell system/vendor/bin/thermal_manager vendor/etc/.tp/.ht120.mtc

2)关闭之后验证,获取配置的cmd:
adb shell cat data/.tp/.settings
如果是120则是:vendor/etc/.tp/.ht120.mtc

--------

 

转载于:https://www.cnblogs.com/Ph-one/p/5703464.html

相关文章:

  • Android 在 SElinux下 如何获得对一个内核节点的访问权限
  • 一个简单的演示用的Linux字符设备驱动程序
  • 使用register_chrdev注册字符设备
  • ioctl方法详解
  • 手机对支持128G扩展内存的介绍
  • Linux sync命令的作用
  • touch 命令
  • 良子博客
  • mipi协议中文详解
  • 理解mipi协议
  • 待查项
  • drivers/mfd/Mfd-core.c
  • LInux ugo权限详解[修]
  • Camera 图像处理原理分析
  • camera isp
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • SegmentFault for Android 3.0 发布
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JS学习笔记——闭包
  • vue--为什么data属性必须是一个函数
  • 读懂package.json -- 依赖管理
  • 分布式事物理论与实践
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 排序算法学习笔记
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 我感觉这是史上最牛的防sql注入方法类
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 学习JavaScript数据结构与算法 — 树
  • 一个项目push到多个远程Git仓库
  • 用Canvas画一棵二叉树
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • # 透过事物看本质的能力怎么培养?
  • #Z2294. 打印树的直径
  • ${ }的特别功能
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (力扣)1314.矩阵区域和
  • (三)docker:Dockerfile构建容器运行jar包
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET MVC之AOP
  • .NET 中创建支持集合初始化器的类型
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • @angular/cli项目构建--http(2)
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @RestController注解的使用
  • [\u4e00-\u9fa5] //匹配中文字符