现象: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

更多相关文章

  1. 基于Android的Linux内核的电源管理:概述
  2. 华为P30安卓内核编译android kernel build
  3. 安卓学习日记(一):了解安卓架构(linux内核层、系统运行库层、应用框
  4. Android 内核添加驱动
  5. android中的Binder(android内核学习记录)
  6. 往android的内核添加驱动(其实就是添加linux内核驱动)
  7. android 系统的开机启动流程源码解析(从linux 内核到android Laun
  8. Android内核与主线linux内核的比较(Android对Linux内核的改动你知

随机推荐

  1. android小结(一)之menu
  2. Android 上传自己的开源库到Bintray
  3. eclipse无法导入Android工程的现象与解决
  4. Android 原始资源文件的使用详解
  5. Android 学习 笔记_08. 广播机制
  6. 面向 Android* Jelly Bean 4.2 的英特尔
  7. Android中TouchEvent触摸事件机制
  8. 2012第一季度智能手机发货量报表
  9. android studio打jar包、aar包
  10. Android(安卓)APK升级代码编写心得