kevin知识库
首页 / MTK 平台 / /mtk/charging-nodes/
整理中 创建 2026/06/06 更新 2026/06/06

“充电相关查询节点”在这个项目里,指的是能反映或控制以下状态的运行时接口:

#mtk #charging

[MTK]充电相关节点查询

一、排查目标定义

“充电相关查询节点”在这个项目里,指的是能反映或控制以下状态的运行时接口:

  • 电池状态:capacitystatushealthtempvoltage_nowcurrent_now

  • 充电器状态:onlineusb_typeinput_current_limitconstant_charge_current

  • 快充链路状态:分压充电泵、主充电器、PD/Type-C 相关状态

  • 控制接口:停充、限流、电源路径、安全定时器 在 Android/MTK 项目里,这类节点通常落在 4 层:

  • power_supply class/sys/class/power_supply/...

  • 驱动私有 sysfs:比如 mtk-gauge/*、I2C 设备私有属性

  • procfs:MTK 常见 /proc/mtk_battery_cmd/*

  • Framework/Health:dumpsys battery、BatteryService、health HAL 这次排查的目标,不是泛泛看电池信息,而是把 Kamvas_Pad_12 这个项目里的“真实节点地图”建立起来,并确认:

  • 哪些 power_supply 节点真的被注册出来了

  • battery / charger / usb_type / gauge / charge pump 分别对应谁

  • online/status/current_now/capacity/temp 的值是否可信

  • Framework 看到的状态是不是来自这些内核节点

  • 节点异常时,到底是 DTS、驱动注册、属性实现、权限,还是硬件状态没上来


二、第一阶段:先从源码侧建立“节点地图”

1. DTS / DTSI

【排查目标】

确认这个项目理论上会有哪些 charger/gauge/typec 设备,以及它们分别挂在哪条总线、哪个地址、是什么角色。

【为什么查这里】

DTS 决定“项目里接了什么芯片”和“驱动最终会 probe 谁”。如果 DTS 没有设备,后面所有节点都不可能出现。

【本项目先看这些文件】

【从这些文件里要确认什么】

  • chargermtk_gaugetypectcpc 是否启用
  • compatible 是谁
  • I2C 总线号和地址
  • charger_namegauge phandle、PD/Type-C 关联关系
  • 是否有 disable-chargerdisable-mtkbattery

【本项目已经确认到的关键点】

【要执行的命令】

rg -n "sgm41600|mt6375|mtk_gauge|&charger|typec|tcpc|gauge = <&mtk_gauge>|disable-charger|disable-mtkbattery" Z:\\kp1202_v16\\mt8391_u\\kernel\\kernel_device_modules-6.1\\arch\\arm64\\boot\\dts\\mediatek

【正常现象】

  • 能明确看到 charger/gauge/typec 芯片实例
  • 能对上 I2C 设备,如 4-00345-006e
  • 没有把当前板级配置禁用掉

【异常现象】

  • 找不到 charger/gauge 设备
  • 板级 dts 有 disable-charger
  • mtk_gauge 被删或未引用

【如何根据现象继续缩小范围】

  • 如果 DTS 没设备:优先查板级 dts include 链和 .dtsi 是否被正确包含
  • 如果 DTS 有设备但运行时没有节点:进入驱动 probe / register 排查

2. kernel 驱动源码

【排查目标】

把“理论节点名”和“支持的属性名”从源码直接抠出来,建立节点地图。

【为什么查这里】

最终目录名是谁,不是猜出来的,是 power_supply_desc.name 定义的;最终文件名有哪些,是 POWER_SUPPLY_PROP_* 决定的。

【本项目先看这些文件】

【从这些文件里要确认什么】

  • 谁调用了 power_supply_register / devm_power_supply_register
  • power_supply_desc.name 是什么
  • POWER_SUPPLY_PROP_* 枚举里有哪些属性
  • get_property() 实现里每个属性从哪来
  • 有没有私有 DEVICE_ATTR / sysfs_create_group / proc_create_data

【本项目已经确认到的关键点】

【要执行的命令】

rg -n "power_supply_register|devm_power_supply_register|POWER_SUPPLY_PROP_|psy_desc.name|DEVICE_ATTR|sysfs_create_group|proc_create_data|proc_mkdir" Z:\\kp1202_v16\\mt8391_u\\kernel\\kernel_device_modules-6.1\\drivers\\power\\supply

【正常现象】

  • 每条查询链都能找到明确的注册点
  • 能把目录名和属性名完整列出来

【异常现象】

  • 找到节点名但找不到属性实现
  • 找到属性枚举但 get_property 没处理
  • 有目录但没有标准属性,只有私有属性

【如何根据现象继续缩小范围】

  • 有枚举没实现:属性可能读错或报 EINVAL
  • 有实现但运行时没文件:可能节点不是标准 power_supply,而是私有 sysfs/proc
  • 有私有节点但权限不足:继续看 init/ueventd/sepolicy

3. 设备初始化/权限相关文件

【排查目标】

确认节点读不到时,是“没创建”还是“权限拦住”。

【为什么查这里】