一、代码分析
两个文档(mtk_charger.h 和 mtk_charger.c)的分析。这些文件是MediaTek(MTK)充电器驱动的头文件和源代码实现,基于Linux内核的电源管理系统(power_supply框架)。代码主要处理电池充电逻辑,包括充电算法、温度保护、JEITA标准、电源路径管理、PD适配器通知等。代码遵循GPL-2.0许可,版权属于MediaTek Inc.(2019年)。
1. 代码整体分析
mtk_charger.h(头文件)
- 主要内容:
- 定义了常量、宏和枚举:如充电电流阈值(e.g., USB_CHARGER_CURRENT = 500000 uA)、温度阈值(e.g., MAX_CHARGE_TEMP = 50°C)、充电状态(e.g., CHG_VBUS_OV_STATUS)、JEITA状态(e.g., TEMP_BELOW_T0)。
- 定义了结构体:
- charger_data:存储充电限制(如输入/充电电流限制、温度范围)。
- mtk_charger_algorithm:充电算法接口(包括do_algorithm、enable_charging等回调)。
- charger_custom_data:自定义充电参数(如电池CV电压、JEITA阈值)。
- mtk_charger:核心结构体,包含设备指针、电源供应描述、充电数据、算法、锁等。
- 其他如sw_jeita_data(软件JEITA数据)、battery_thermal_protection_data(热保护数据)。
- 声明了函数:
- 框架相关:mtk_basic_charger_init, mtk_pulse_charger_init 等初始化算法。
- 获取电池信息:get_uisoc, get_battery_voltage, get_battery_temperature 等。
- 充电控制:disable_hw_ovp, get_charger_type, _wake_up_charger 等。
- 其他:mtk_chg_enable_vbus_ovp(VBUS过压保护)。
- 作用:提供充电器驱动的接口和数据结构定义,支持多种充电算法(Basic、Pulse)和保护机制(如过压、过温、JEITA)。它不包含实现,仅声明。
mtk_charger.c(源文件)
- 主要内容:
- 实现了充电器驱动的核心逻辑,包括DT解析、电源供应注册、线程管理、事件处理。
- 处理充电线程(charger_routine_thread):定期检查电池存在、动态MIVR、JEITA状态、算法执行、安全定时器等。
- 支持电源供应属性(get/set property):如在线状态、电压、电流、温度。
- 事件通知:PD适配器事件、充电算法事件、电源变化。
- 电源路径管理:启用/禁用电源路径,强制禁用用于测试。
- 探针函数(mtk_charger_probe):初始化驱动、注册电源供应、启动线程。
- 其他:ATM模式检测、JEITA状态机、VBUS OVP等。
- 作用:实现充电器驱动的运行时逻辑,与内核集成(使用kthread、alarmtimer、power_supply)。支持单/双充电器配置、HV充电、快充指示等。代码处理异常(如无电池关机)、热保护和算法仲裁。
- 注意:文件被截断(e.g., "sw_jeita->sm == TEMP_BELOW...(truncated 59250 characters)"),但基于提供的部分,我分析了可见的函数。完整代码可能包含更多实现如charger_dev_event等。
总体上,这是一个模块化的充电器驱动,支持MediaTek平台的电池管理,集成PD、JEITA和自定义算法。
2. 函数的主要作用
以下列出主要函数(从.h和.c中提取),按类别分组。仅列出关键函数,忽略次要或内联函数。作用基于代码逻辑描述。
初始化和配置函数(从mtk_charger_probe调用)
- mtk_charger_probe:驱动探针函数。解析DT节点,初始化锁、定时器、电源供应(psy1/psy2/psy_dvchg等),注册通知器,启动充电线程。返回0表示成功。
- mtk_charger_parse_dt:从设备树(DT)解析充电参数(如电流、温度阈值、算法名称)。设置默认值,支持Basic/Pulse算法。
- mtk_charger_init_timer:初始化alarm定时器,用于充电轮询(默认间隔10s)。
- mtk_charger_get_atm_mode:从命令行解析ATM(Automated Test Mode)模式,启用/禁用测试功能。
- mtk_basic_charger_init:初始化基本充电算法(设置回调如do_algorithm、enable_charging)。
- mtk_pulse_charger_init:初始化脉冲充电算法(类似基本算法,但支持脉冲模式)。
充电控制和状态函数
- _wake_up_charger:唤醒充电线程(使用wakeup_source防止休眠)。
- _mtk_enable_charging:启用/禁用充电(调用算法的enable_charging回调)。
- mtk_charger_start_timer:启动alarm定时器,计算结束时间并设置alarm。
- check_battery_exist:检查电池是否存在(多次采样,如果不存在则关机,除META/ATE模式)。
- check_dynamic_mivr:动态调整MIVR(Minimum Input Voltage Regulation)基于VBAT和快充状态。
- do_sw_jeita_state_machine:软件JEITA状态机,根据电池温度更新状态(e.g., TEMP_ABOVE_T4禁用充电)和CV电压。
- sw_jeita_cv_update:更新JEITA下的CV电压(基于当前状态)。
- mtk_chgstat_notify:通知充电异常状态(如VBUS OV、温度异常)。
- mtk_chg_enable_vbus_ovp:启用/禁用VBUS过压保护(在.h声明,可能在.c实现)。
- disable_hw_ovp:禁用硬件OVP(Over Voltage Protection)。
- mtk_charger_enable_power_path:启用/禁用电源路径(Power Path),使用charger_dev_enable_powerpath。
- mtk_charger_force_disable_power_

最低0.47元/天 解锁文章
537

被折叠的 条评论
为什么被折叠?



