|
发表于 2020-9-1 17:20:28
7556 浏览 0 回复
MTK6739 充电的Safety timer
[DESCRIPTION]
Safety timer是充电的一种保护机制,当充电时间超过一定时间(默认12小时)都没有充满过,会触发充电超时,停止充电。
[SOLUTION]
1. 一般在MTBF等长时间测试时,需在测试前执行以下命令来关闭safety timer机制(重启失效):
- adb root
- adb shell "echo 0 >/proc/mtk_battery_cmd/en_safety_timer"
复制代码 代码位置:
- /kernel-4.4/drivers/power/mediatek/charger/mtk_linear_charging.c
- 242 /* return false if total charging time exceeds max_charging_time */
- 243 static bool mtk_linear_check_charging_time(struct charger_manager *info)
- 248 if (info->enable_sw_safety_timer) {
- ...
- 253 if (algo_data->total_charging_time >= info->data.max_charging_time) {
- 254 chr_err("%s: SW safety timeout: %d sec > %d sec\n",
- 255 __func__, algo_data->total_charging_time,
- 256 info->data.max_charging_time);
- /kernel-4.4/drivers/power/mediatek/charger/mtk_charger_intf.h
- 45 #define MAX_CHARGING_TIME (12 * 60 * 60) /* 12 hours */
复制代码
2. 值得注意的是,当手机没有使用charger ic,即linear charging。
即便是将en_safety_timer写为1,cat的结果还是0,那写进去的值到底有没有生效呢?
- adb shell "echo 1 >/proc/mtk_battery_cmd/en_safety_timer"
复制代码
跟踪代码会发现没有相关charger ic定义的ops,最终就会call不到ops下的enable_safety_timer,即不能将enable的值写到chg_dev中。
- /kernel-4.4/drivers/power/mediatek/charger/mtk_charger.c
- 2358 static ssize_t mtk_charger_en_safety_timer_write(struct file *file, const char *buffer,
- 2374 charger_dev_enable_safety_timer(info->chg1_dev, enable);
- 2375 pr_debug("%s: enable safety timer = %d\n", __func__, enable);
- 2378 if (enable)
- 2379 info->enable_sw_safety_timer = true;
- 2380 else
- 2381 info->enable_sw_safety_timer = false;
- 317 int charger_dev_enable_safety_timer(struct charger_device *charger_dev, bool en)
- 318 {
- 319 if (charger_dev != NULL && charger_dev->ops != NULL && charger_dev->ops->enable_safety_timer)
- 320 return charger_dev->ops->enable_safety_timer(charger_dev, en);
复制代码
而mtk_charger_en_safety_timer_show中的safety_timer_en正是从charger dev拿的值,由于写的时候就没有将值写到charger dev中,自然也就拿不到值。
- 2347 static int mtk_charger_en_safety_timer_show(struct seq_file *m, void *data)
- 2352 charger_dev_is_safety_timer_enabled(pinfo->chg1_dev, &safety_timer_en);
- 2353 seq_printf(m, "%d\n", safety_timer_en);
复制代码 但是看代码其实是通过sw的方式enable_sw_safety_timer来控制实现的,所以写进去的1有生效,只不过show的时候这部分没有实作。
|
|
手机微信同号:13682654092
|
|
|
|
|
登录或注册
|