我的NPI项目之Android电源系列(四) -- 关于剩余充满时间的问题的代码跟踪-max1720x_battery.c qpnp-smb2.c

本文主要是介绍我的NPI项目之Android电源系列(四) -- 关于剩余充满时间的问题的代码跟踪-max1720x_battery.c qpnp-smb2.c,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从我的NPI项目之Android电源系列(三), 能够看出,healthd是通过读取/sys/class/power_supply/battery/time_to_full_now而进行充满剩余时间的。

在/sys/class/power_supply/battery/...目录下有很多文件,具体内容如下:

/sys/class/power_supply/ 从字面意思就能够理解,power_supply目录下的内容为该设备的供电来源,在我的项目中,Linux的内核子系统中注册了如下的供电类型,我们主要关注框出来的部分:

这里我们关注一下,Linux驱动设备模型下的power_supply类别下的battery设备的文件节点。而代码/qpnp-smb2.c就是这个battery电源类型的驱动所在。

但是,这个是板端的guage,虽然很准但是我们在驱动只是把它当作了一个过度。由于为了使用到电池中的guage,我们添加了一个smart_battery作为battery的后端实现。

我项目上的healthd代码中,就是通过另外一个文件节点用于读取电池信息的,这部分是这针对比较特殊的设备的。因为,我的项目中是同平台多设备的情况。而设备之间存在有差异。而这个比较特殊的文件为/sys/class/power_supply/smart_battery,对应的驱动为max1720x_battery.c (目前看代码是这个,后面还需要进一步确认),这个guage IC是内嵌在电池中的一个guage。

而/sys/class/battery所对应的是主板端的guage,在sdm660平台上,对应的是文件qpnp-smb2.c


static const struct power_supply_desc batt_psy_desc = {.name = "battery",.type = POWER_SUPPLY_TYPE_BATTERY,.properties = smb2_batt_props,.num_properties = ARRAY_SIZE(smb2_batt_props),.get_property = smb2_batt_get_prop,.set_property = smb2_batt_set_prop,.property_is_writeable = smb2_batt_prop_is_writeable,
};

该驱动实际上是高通pmic上的一个guage。

另外,我们平台的有多个型号的max1720/max1721/..., 于是就将公共的部分抽了出来commoncfg_max1720x.c 作为了max1720x_battery.c的后端。真正实现对IC寄存器的读写操作。

	case POWER_SUPPLY_PROP_TIME_TO_FULL_NOW:ret = max1720x_read_verify_reg(max1720x_chipinfo, 0, MAX1720X_TTF, &data);if (ret < 0) {val->intval = max1720x_chipinfo->regs_cache.TTF;dev_err(&max1720x_chipinfo->client->dev,"battery full now read fail=%d, keep previous=%d\n", ret, val->intval);break;}/* Unit: 1 : 5.625 sec */val->intval = (data * 5625)/1000; /* reply unit is second */max1720x_chipinfo->regs_cache.TTF = val->intval;dev_dbg(&max1720x_chipinfo->client->dev,"%s %d value:%d ",__FUNCTION__,__LINE__,val->intval);dev_info(&max1720x_chipinfo->client->dev,"%s %d value:%d ",__FUNCTION__,__LINE__,val->intval);break;

再回到之前的问题上来,电池充电信息为什么会时对时不对。熄屏/亮屏过程中,可以看出从guage中读取的值确实有一个变化的趋势(电量在~45%),例如:

异常的电池时,读出来的时间小于60s,而又大于0s;这样就会出现,

我的NPI项目之Android电源系列(二) -- 关于剩余充满时间的问题-CSDN博客中的问题:

在电池电量为~85%的时候,插拔充电线后,guage有这样的变化规律,而出问题的设备,卡在了22(<60)的状态了;

现在针对这个问题,可以得出结论,是部分电池问题guage问题或者电池本身health问题,导致计算时间异常了。

后面,需要进行souring看看,把有问题的电池filter出来。

这篇关于我的NPI项目之Android电源系列(四) -- 关于剩余充满时间的问题的代码跟踪-max1720x_battery.c qpnp-smb2.c的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/538389

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可