Android UI显示电量跳变
现象:android上层显示电量跳变,但是内核log显示UI_SOC2没有跳变现象;
原因:mtk默认设定尽可能少的通知上层次数,以减少系统功耗,SOC有变化才更新一次,否则60秒
后再更新一次,代码如下:
static void battery_update(struct battery_data *bat_data)
{
..............
if (update_cnt == 6) {
/* Update per 60 seconds */
power_supply_changed(bat_psy);
pre_soc = BMT_status.SOC;
update_cnt = 0;
} else if (pre_soc != BMT_status.SOC) {
/* Update when soc change */
power_supply_changed(bat_psy);
pre_soc = BMT_status.SOC;
update_cnt = 0;
} else if (cable_in_uevent == 1) {
/*To prevent interrupt-trigger update from being filtered*/
power_supply_changed(bat_psy);
cable_in_uevent = 0;
} else {
/* No update */
update_cnt++;
}
解决方法:
将BMT_status.SOC改为BMT_status.UI_SOC2,因为由于GM2.0算法将电量分成3层SOC/UI_SOC/UI_SOC2,这里默认使用SOC作为更新的条件,可能SOC变化1%时,UI_SOC2已经变化2%,导致android UI显示出来的电量有跳变的情况,修改后拿UI_SOC2作为更新的条件,实时的将android电量同步到内核需要显示的电量,这样就不会出现电量跳变情况。
原文链接:http://bbs.×××/thread-270692-1-1.html
更多相关文章
- 基于Android的Linux内核的电源管理:概述
- 华为P30安卓内核编译android kernel build
- 安卓学习日记(一):了解安卓架构(linux内核层、系统运行库层、应用框
- Android 内核添加驱动
- android中的Binder(android内核学习记录)
- 往android的内核添加驱动(其实就是添加linux内核驱动)
- android 系统的开机启动流程源码解析(从linux 内核到android Laun
- Android内核与主线linux内核的比较(Android对Linux内核的改动你知