MTK6572平台待机电池电量长时间待机电池电量不变,唤醒后电池电量快速下降。
时间:10-02
整理:3721RD
点击:
mtk6572平台待机电池电量长时间待机电池电量不变,唤醒后电池电量快速下降。
按MTK的FAQ修改也一样现像。
按MTK的FAQ修改也一样现像。
battery_meter.c 修改这个文件的resume函数,如下:
- static int battery_meter_resume(struct platform_device *dev)
- {
- #if defined(CONFIG_POWER_EXT)
- #elif defined(SOC_BY_SW_FG)
- kal_int32 hw_ocv_after_sleep;
- struct timespec xts, tom, rtc_time_after_sleep;
- // kal_int32 sw_vbat;
- // kal_int32 vbat_diff = 200;
- get_xtime_and_monotonic_and_sleep_offset(&xts, &tom, &rtc_time_after_sleep);
- _g_bat_sleep_total_time += rtc_time_after_sleep.tv_sec - g_rtc_time_before_sleep.tv_sec;
- battery_xlog_printk(BAT_LOG_CRTI, "[battery_meter_resume] sleep time = %d, g_spm_timer = %d\n", _g_bat_sleep_total_time, g_spm_timer);
- if (_g_bat_sleep_total_time < g_spm_timer) {
- return 0;
- }
- bat_spm_timeout = true;
- battery_meter_ctrl(BATTERY_METER_CMD_GET_HW_OCV, &hw_ocv_after_sleep);
-
- //开始添加
- int vol_bat1=0;
- int HW_OCV1=0;
- int D0=0;
- int ret=0;
- vol_bat1 = 15; //set avg times
- ret = battery_meter_ctrl(BATTERY_METER_CMD_GET_ADC_V_BAT_SENSE, &vol_bat1);
- HW_OCV1 = vol_bat1 + mtk_imp_tracking(vol_bat1, 800, 5);//待机电流值80mA,可以根据客户情况,稍作调整
- D0=fgauge_read_d_by_v(HW_OCV1);
- battery_xlog_printk(BAT_LOG_CRTI, "[battery_meter_resume] vol_bat1=%d, HW_OCV1=%d\n", vol_bat1 ,HW_OCV1);
- battery_xlog_printk(BAT_LOG_CRTI, "[battery_meter_resume] D0=%d,UI_SOC_TEMP=%d,be_ocv=(%d) \n", D0,100-D0,g_hw_ocv_before_sleep);
- //结束添加
-
- #if 0
- sw_vbat = battery_meter_get_battery_voltage();
-
- bm_print(BM_LOG_CRTI, "HW_OCV=%d, SW_VBAT=%d\n", hw_ocv_after_sleep, sw_vbat);
-
- if(hw_ocv_after_sleep < sw_vbat)
- {
- bm_print(BM_LOG_CRTI, "Ignore HW_OCV : small than SW_VBAT\n");
- }
- else if( (hw_ocv_after_sleep - sw_vbat) > vbat_diff )
- {
- bm_print(BM_LOG_CRTI, "Ignore HW_OCV : diff > %d\n", vbat_diff);
- }
- else
- #endif
- {
-
-
- if(_g_bat_sleep_total_time > 3600) //1hr
- {
- if(1)//(hw_ocv_after_sleep <= g_hw_ocv_before_sleep)
- {
- /*
- gFG_DOD0 = fgauge_read_d_by_v(hw_ocv_after_sleep);
- oam_v_ocv_2 = oam_v_ocv_1 = hw_ocv_after_sleep;
- oam_car_1 = 0;
- oam_car_2 = 0; */
- //oam_d0 = fgauge_read_d_by_v(hw_ocv_after_sleep);
- oam_d0 = D0;
- oam_v_ocv_2 = oam_v_ocv_1 = HW_OCV1;
- oam_car_1 = 0;
- oam_car_2 = 0;
- if (BMT_status.UI_SOC>100-oam_d0)
- {
- BMT_status.UI_SOC=100-oam_d0;
- oam_d_5 = oam_d0;
- }
- //结束修改
-
- }
- else
- {
- oam_car_1 = oam_car_1 + (40* (rtc_time_after_sleep.tv_sec - g_rtc_time_before_sleep.tv_sec)/3600); //0.1mAh
- oam_car_2 = oam_car_2 + (40* (rtc_time_after_sleep.tv_sec - g_rtc_time_before_sleep.tv_sec)/3600); //0.1mAh
- }
- }
- else
- {
- oam_car_1 = oam_car_1 + (20* (rtc_time_after_sleep.tv_sec - g_rtc_time_before_sleep.tv_sec)/3600); //0.1mAh
- oam_car_2 = oam_car_2 + (20* (rtc_time_after_sleep.tv_sec - g_rtc_time_before_sleep.tv_sec)/3600); //0.1mAh
- }
- bm_print(BM_LOG_CRTI, "sleeptime=(%d)s, be_ocv=(%d), af_ocv=(%d), D0=(%d), car1=(%d), car2=(%d) \n",
- rtc_time_after_sleep.tv_sec - g_rtc_time_before_sleep.tv_sec, g_hw_ocv_before_sleep, hw_ocv_after_sleep,gFG_DOD0, oam_car_1, oam_car_2);
- }
- #endif
- bm_print(BM_LOG_CRTI, "[battery_meter_resume]\n");
- return 0;
- }
这个是MTK的FAQ上面的东西。我加过没有用处。你们加了后有用吗?
if(1)//(hw_ocv_after_sleep <= g_hw_ocv_before_sleep)
你看到这个没?
改成这样就行了。
我们也是打LOG看到的,这个if 是跑不进去的。让他跑进去就可以了。
谢谢蒋总!
11:18:57
孙迪财 2015/11/14 11:18:57
蒋总,问下。你电池电量不更的问题,是一点都不更新还是更新很慢啊
11:19:32
光辉岁月 2015/11/14 11:19:32
一点都不更新
孙迪财 2015/11/14 11:20:55
按你那样改了之后就正常了?
光辉岁月 2015/11/14 11:21:19
是的
11:23:02
孙迪财 2015/11/14 11:23:02
我看代码,不是在插SIM的情况下。modem会定时唤醒系统嘛。这样电池不是会更新吗?
光辉岁月 2015/11/14 11:23:27
我当时没有测SIM卡
光辉岁月 2015/11/14 11:23:47
没有试有没有SIM卡,反正是没有SIM卡时测试的
11:26:57
孙迪财 2015/11/14 11:26:57
哦,我这插SIM电池电量更新也有问题。
