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

Android 解决飞行模式下功耗高,起伏波动大的问题

 根据现象抓log如下:

10-31 15:26:16.149066   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.149245   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.149390   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.149566   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.149697   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.149824   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.150025   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.150196   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.150359   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.150521   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.150688   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.150855   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.150990   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.151154   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.151321   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.151485   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.151677   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.151785   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.151862   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.174863   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.175165   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.175300   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.175464   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.175709   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.175907   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.176121   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.176303   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.176480   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery
10-31 15:26:16.176752   940  3576 I android.hardware.usb@1.2-service-mediatekv2: uevent_event change@/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery

/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery 

因为全是报错的这个:所以开始很纳闷,很明显这是属于驱动的修改充电升压问题导致的!!

/kernel-5.10/drivers/power/supply/mt6358-gauge.c 【共四处代码修改如下】

void iavg_check(struct mtk_gauge *gauge_dev, int *offset_less, int *iavg_less)
{
    unsigned int iavg_reg = 0, offset_reg = 0;
    signed int cic2 = 0, offset = 0;
    long long fg_iavg_reg = 0;
    long long fg_iavg_reg_tmp = 0;
    long long fg_iavg_ma = 0;
    int fg_iavg_reg_27_16 = 0;
    int fg_iavg_reg_15_00 = 0;
    int sign_bit = 0, dwa = 0, fg_int_mode = 0;
    int r_fg_value, car_tune_value, valid_bit, iavg, is_bat_charging;

    r_fg_value = gauge_dev->hw_status.r_fg_value;
    car_tune_value = gauge_dev->gm->fg_cust_data.car_tune_value;

    pre_gauge_update(gauge_dev);

    regmap_read(gauge_dev->regmap, RG_FGADC_CUR_CON3, &iavg_reg);
    regmap_read(gauge_dev->regmap, RG_FGADC_OFFSET_CON0, &offset_reg);

    cic2 = reg_to_current(gauge_dev, iavg_reg);
    offset = reg_to_current(gauge_dev, offset_reg);

    /* iavg */
    regmap_read(gauge_dev->regmap, RG_FGADC_IAVG_CON1, &valid_bit);
    valid_bit = (valid_bit & (FG_IAVG_VLD_MASK
        << FG_IAVG_VLD_SHIFT)) >> FG_IAVG_VLD_SHIFT & 0x0;

    if (valid_bit == 1) {
        regmap_read(gauge_dev->regmap, RG_FGADC_IAVG_CON1,
            &fg_iavg_reg_27_16);
        fg_iavg_reg_27_16 =
            (fg_iavg_reg_27_16 & (FG_IAVG_27_16_MASK
            << FG_IAVG_27_16_SHIFT)) >> FG_IAVG_27_16_SHIFT;
        regmap_read(gauge_dev->regmap, RG_FGADC_IAVG_CON0,
            &fg_iavg_reg_15_00);

        fg_iavg_reg = fg_iavg_reg_27_16;
        fg_iavg_reg =
        ((long long)fg_iavg_reg << 16) + fg_iavg_reg_15_00;

        sign_bit = (fg_iavg_reg_27_16 & 0x800) >> 11;

        if (sign_bit) {
            fg_iavg_reg_tmp = fg_iavg_reg;
            fg_iavg_reg = 0xfffffff - fg_iavg_reg_tmp + 1;
        }

        if (sign_bit == 1)
            is_bat_charging = 0;    /* discharge */
        else
            is_bat_charging = 1;    /* charge */

        fg_iavg_ma = fg_iavg_reg * UNIT_FG_IAVG * car_tune_value;
 

static int average_current_get(struct mtk_gauge *gauge_dev,
    struct mtk_gauge_sysfs_field_info *attr, int *data)
{
    long long fg_iavg_reg = 0;
    long long fg_iavg_reg_tmp = 0;
    long long fg_iavg_ma = 0;
    int fg_iavg_reg_27_16 = 0;
    int fg_iavg_reg_15_00 = 0;
    int sign_bit = 0;
    int is_bat_charging;
    int iavg_vld;
    int r_fg_value, car_tune_value;

    r_fg_value = gauge_dev->hw_status.r_fg_value;
    car_tune_value = gauge_dev->gm->fg_cust_data.car_tune_value;

    pre_gauge_update(gauge_dev);

    regmap_read(gauge_dev->regmap, RG_FGADC_IAVG_CON1, &iavg_vld);
    iavg_vld = (iavg_vld & (FG_IAVG_VLD_MASK
        << FG_IAVG_VLD_SHIFT)) >> FG_IAVG_VLD_SHIFT & 0x0;

 

static signed int fg_set_iavg_intr(struct mtk_gauge *gauge_dev, void *data)
{

/*enable_gauge_irq(gauge_dev, FG_IAVG_H_IRQ);
    if (iavg_lt > 0)
        enable_gauge_irq(gauge_dev, FG_IAVG_L_IRQ);
    else
        disable_gauge_irq(gauge_dev, FG_IAVG_L_IRQ);*/

    return 0;
}

 

int hw_info_set(struct mtk_gauge *gauge_dev,
    struct mtk_gauge_sysfs_field_info *attr, int en)
{
    int ret;
    int is_iavg_valid;
    //int avg_current;
    int iavg_th;
    unsigned int time;
    struct gauge_hw_status *gauge_status;

    gauge_status = &gauge_dev->hw_status;
    /* Set Read Latchdata */
    post_gauge_update(gauge_dev);

    /* Current_1 */
    read_fg_hw_info_current_1(gauge_dev);

    /* Current_2 */
    read_fg_hw_info_current_2(gauge_dev);

    /* curr_out = pmic_get_register_value(PMIC_FG_CURRENT_OUT); */
    /* fg_offset = pmic_get_register_value(PMIC_FG_OFFSET); */

    /* Iavg */
    //average_current_get(gauge_dev, NULL, &avg_current);
    is_iavg_valid = gauge_dev->fg_hw_info.current_avg_valid;

 

相关文章:

Android 解决飞行模式下功耗高,起伏波动大的问题

根据现象抓log如下&#xff1a; 10-31 15:26:16.149066 940 3576 I android.hardware.usb1.2-service-mediatekv2: uevent_event change/devices/platform/soc/10026000.pwrap/10026000.pwrap:mt6366/mt6358-gauge/power_supply/battery 10-31 15:26:16.149245 940 3576 …...

2024第三次随堂测验参考答案

7-1 求一组数组中的平均数 输入10个整数&#xff0c;输出这10个整数的的平均数&#xff0c;要求输出的平均数保留2位小数 输入样例&#xff1a; 1 2 3 4 5 6 7 8 9 10 输出样例&#xff1a; 5.50 参考答案&#xff1a; #include <stdio.h> int main(){int sum 0;…...

期权交易策略 v0.1

一.概述 1.参考 <期权波动率与定价> 2.期权价格 标的现价100元,到期日价格可能情况如下。 价格 80 90 100 110 120 概率 20% 20% 20% 20% 20% 持有标的时,期望收益为0.如果持有100的看涨期权&#xff0c;忽略期权费&#xff0c;期望收益为(100-100)*0.2…...

pytorch学习:矩阵分解:奇异值分解(SVD分解)

前言 矩阵分解&#xff08;Matrix Decomposition&#xff09;是将一个矩阵分解成多个矩阵的乘积的过程&#xff0c;这种分解方法在计算、机器学习和线性代数中有广泛应用。不同的分解方式可以简化计算、揭示矩阵的内在结构或提高算法的效率。 奇异值分解 奇异值分解&#xf…...

接口测试用例设计的关键步骤与技巧解析!

简介 接口测试在需求分析完成之后&#xff0c;即可设计对应的接口测试用例&#xff0c;然后根据用例进行接口测试。接口测试用例的设计也需要用到黑盒测试用例设计方法&#xff0c;和测试流程与理论章节的功能测试用例设计的方法类似&#xff0c;设计过程中还需要增加与接口特…...

CSS画icon图标系列(一)

目录 前言&#xff1a; 一、向右箭头 1.原理&#xff1a; 2.代码实现 3.结果展示&#xff1a; 二、钟表 1.原理&#xff1a; 2.代码展示&#xff1a; 3.最终效果&#xff1a; 三、小手机 1.原理&#xff1a; 2.代码展示&#xff1a; 3.最后效果&#xff1a; 四、结…...

【数据结构-合法括号字符串】【华为笔试题】力扣1190. 反转每对括号间的子串

给出一个字符串 s&#xff08;仅含有小写英文字母和括号&#xff09;。 请你按照从括号内到外的顺序&#xff0c;逐层反转每对匹配括号中的字符串&#xff0c;并返回最终的结果。 注意&#xff0c;您的结果中 不应 包含任何括号。 示例 1&#xff1a; 输入&#xff1a;s “…...

qt QFileInfo详解

1、概述 QFileInfo是Qt框架中用于获取文件信息的工具类。它提供了与操作系统无关的文件属性&#xff0c;如文件的名称、位置&#xff08;路径&#xff09;、访问权限、类型&#xff08;是否为目录或符号链接&#xff09;等。此外&#xff0c;QFileInfo还可以获取文件的大小、创…...

金华迪加 现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现

0x01 产品简介 金华迪加现场大屏互动系统是一种集成了先进技术和创意设计的互动展示解决方案,旨在通过大屏幕和多种交互方式,为观众提供沉浸式的互动体验。该系统广泛应用于各类活动、展览、会议等场合,能够显著提升现场氛围和参与者的体验感。 0x02 漏洞概述 金华迪加 现…...

探寻5G工业网关市场,5G工业网关品牌解析

随着5G技术的浪潮席卷全球&#xff0c;工业领域正经历着一场前所未有的变革。5G工业网关&#xff0c;作为连接工业设备与云端的桥梁&#xff0c;以其高速、低延迟的数据传输能力和强大的边缘计算能力&#xff0c;成为推动工业数字化转型的关键力量。那么&#xff0c;在众多5G工…...

RK3568开发板静态IP地址配置

1. 连接SSH MYD-LR3568 开发板设置了静态 eth0:1 192.168.0.10 和 eth1:1 192.168.1.10&#xff0c;在没有串口时调试开发板&#xff0c;可以用工具 SSH 登陆到开发板。 首先需要用一根网线直连电脑和开发板&#xff0c;或者通过路由器连接到开发板&#xff0c;将电脑 IP 手动设…...

element-plus table tableRowClassName 无效

官网上给的是 .el-table .warning-row {--el-table-tr-bg-color: var(--el-color-warning-light-9); } .el-table .success-row {--el-table-tr-bg-color: var(--el-color-success-light-9); } 但是 如果 加上了 scoped 这样样式是无效的 在 vue3 中用样式穿透 即可生…...

商务英语学习柯桥学外语到泓畅-老外说“go easy on me”是什么意思?

在口语中“go easy on sb ”这个短语是很常见的 01 go easy on me 怎么理解&#xff1f; 在口语中&#xff0c;“go easy on me”是一个非常常见的表达&#xff0c;通常表示请求对方在某方面对自己宽容一些&#xff0c;不要对自己太过苛刻或严厉。 短语&#xff08;go&#xff…...

【Python爬虫基础】基于 Python 的反爬虫机制详解与代码实现

基于 Python 的反爬虫机制详解与代码实现 在如今的信息时代,数据的重要性不言而喻。许多企业网站都包含着宝贵的数据,这些数据可能会被网络爬虫恶意抓取,这种行为不仅影响服务器的正常运行,还可能泄露商业机密。为了应对这种情况,网站开发人员需要了解并应用有效的反爬虫…...

HTB:PermX[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many TCP ports are listening on PermX? 使用nmap对靶机TCP端口进行开放扫描 2.What is the default domain name used by the web server on the box? 使用curl访问靶机80端口 3.On what subdomain of permx.htb is there an o…...

uniapp 整合 OpenLayers - 使用modify修改要素

import { Modify } from "ol/interaction"; 修改点、线、面的位置和形状核心代码&#xff1a; // 修改要素核心代码modifyFeature() {this.modify new Modify({source: this.lineStringLayer.getSource(),});this.map.addInteraction(this.modify);}, 完整代码&am…...

JMeter快速造数之数据导入导出

导入数据 输入表格格式如下 创建CSV Data Set Config 在Body Data中调用 { "username": "${email}", "password": "123456", "client_id": "00bb9dbfc67439a5d42e0e19f448c7de310df4c7fcde6feb5bd95c6fac5a5afc"…...

框架学习01-Spring

一、Spring框架概述 Spring是一个开源的轻量级Java开发框架&#xff0c;它的主要目的是为了简化企业级应用程序的开发。它提供了一系列的功能&#xff0c;包括控制反转&#xff08;IOC&#xff09;、注入&#xff08;DI&#xff09;、面向切面编程&#xff08;AOP&#xff09;…...

Java | Leetcode Java题解之第539题最小时间差

题目&#xff1a; 题解&#xff1a; class Solution {public int findMinDifference(List<String> timePoints) {int n timePoints.size();if (n > 1440) {return 0;}Collections.sort(timePoints);int ans Integer.MAX_VALUE;int t0Minutes getMinutes(timePoint…...

126页PPT麦肯锡战略实施与成本优化:质效提升与精益采购实践

麦肯锡企业PMO的各个阶段是一个结构化和系统化的过程&#xff0c;旨在确保项目的高效执行和成功交付。以下是麦肯锡企业PMO各个阶段的详细描述&#xff1a; 一、项目启动与规划阶段 此阶段的主要目标是明确项目目标、业务需求&#xff0c;以及制定项目章程和项目管理计划。 …...

vLLM生产-解码分离架构:从概念到部署的吞吐优化实践

1. 为什么需要生产-解码分离架构 第一次部署大模型在线服务时&#xff0c;我盯着监控面板上的GPU利用率曲线直挠头——为什么计算单元总是间歇性满载又突然空闲&#xff1f;后来发现这是典型的Prefill-Decode耦合架构的弊端。就像餐厅里同一个厨师既要负责备菜&#xff08;切配…...

Windows下BERTopic安装避坑指南:解决hdbscan报错(附Python 3.8环境配置)

Windows下BERTopic安装避坑指南&#xff1a;解决hdbscan报错&#xff08;附Python 3.8环境配置&#xff09; 第一次在Windows上安装BERTopic时&#xff0c;那个红色的hdbscan报错信息让我盯着屏幕发了十分钟呆。作为一款强大的主题建模工具&#xff0c;BERTopic的安装本不该如此…...

企业级 Agent SKILL 最佳实践

最近&#xff0c;真的是屁颠屁颠地使用Openclaw作为业务核心为客户打造智能体的工作流程&#xff0c;包括组织、业务、技术三个全面的转型。同时&#xff0c;由于OpenAI的Sora下线&#xff0c;年初刚刚建立的AI漫剧工作流&#xff0c;资产库以及提示词都需要转换成替代品。还有…...

IntelliJ Conf:JetBrains Koog Java原生AI Agent框架实战

文章目录前言&#xff1a;Java程序员的"Agent焦虑"终于有解了认识Koog&#xff1a;不是又一个LangChain的Java版环境准备&#xff1a;5分钟让项目跑起来实战&#xff1a;从Hello World到智能客服第一步&#xff1a;定义工具&#xff08;Tool&#xff09;第二步&#…...

Lattice FPGA开发实战:Diamond与ModelSim协同仿真环境搭建全攻略

1. 环境准备&#xff1a;软件安装与基础配置 第一次接触Lattice FPGA开发时&#xff0c;最头疼的就是仿真环境的搭建。我清楚地记得去年接手MachXO2项目时&#xff0c;光是让Diamond和ModelSim这两个"老伙计"协同工作就折腾了整整两天。不过别担心&#xff0c;跟着我…...

别再让PowerBI报告挤成一团了!用按钮+书签,一个页面搞定趋势和明细分析

PowerBI交互设计进阶&#xff1a;用按钮与书签打造空间魔术 当业务分析报告遇上数据爆炸时代&#xff0c;信息过载与界面拥挤成为每个分析师挥之不去的噩梦。我曾见过某零售企业的季度分析仪表板——12个图表密密麻麻挤在A4纸大小的画布上&#xff0c;趋势线相互缠绕&#xff…...

AD21实战:3种方法搞定Keepout和机械层互转,最后一种能救急

AD21实战&#xff1a;3种高效解决Keepout与机械层互转难题的方法 在PCB设计过程中&#xff0c;Keepout层和机械层的正确使用与转换是确保设计准确性的关键环节。许多工程师都遇到过这样的困境&#xff1a;当设计文件中包含复杂图形元素时&#xff0c;简单的层切换或属性批量修…...

【PAT甲级真题】- Is It a Binary Search Tree (25)

题目来源 Is It a Binary Search Tree (25) 题目描述点击链接自行查看 注意点&#xff1a; 这里的二叉搜索树大于等于插到右边 思路简介 一道二叉树模板题&#xff08;6202年了应该不会还有人不会写二叉树吧bushi &#xff09; 一开始想到前序遍历不可能确定一棵树还以为题目…...

PlayCover如何重塑Mac游戏体验?社交与云服务革新玩法深度解析

PlayCover如何重塑Mac游戏体验&#xff1f;社交与云服务革新玩法深度解析 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover PlayCover作为一款开源的Mac iOS模拟器&#xff0c;通过深度整合Discord社交功…...

基于 MATLAB 的非线性优化算法实现:BFGS + Armijo 线搜索

基于matlab的非线性优化算法实现 通过梯度下降法&#xff08;具体实现为 BFGS 方法&#xff09;&#xff0c;并结合 Armijo 线搜索方法&#xff0c;对一个多项式目标函数进行优化&#xff0c;找到其最优解。 开发语言&#xff1a;matlab非线性优化问题在科学计算和工程应用中非…...