現象:android上層顯示電量跳變,可是內核log顯示UI_SOC2沒有跳變現象;
緣由:mtk默認設定儘量少的通知上層次數,以減小系統功耗,SOC有變化才更新一次,不然60秒
後再更新一次,代碼以下:
html
static void battery_update(struct battery_data *bat_data)android
{算法
..............ide
if (update_cnt == 6) {spa
/* Update per 60 seconds */orm
power_supply_changed(bat_psy);htm
pre_soc = BMT_status.SOC;get
update_cnt = 0;同步
} else if (pre_soc != BMT_status.SOC) {it
/* 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電量同步到內核須要顯示的電量,這樣就不會出現電量跳變狀況。