温度策略的路径:
device/along/alongk37mv1_bsp/thermal.conf b/device/along/alongk37mv1_bsp/thermal.conf thermal_eng.conf
问题。充电电流只有0.5A 达不到1A
log:
<3>[ 321.092033] (2)[207:bat_thread_kthr][name:charging_hw_fan5405&]fan5405 charging_hw_init line=193
<3>[ 321.097366] (2)[207:bat_thread_kthr][name:switch_charging&][BATTERY] Default CC mode charging : 65000, input current = 320001
<3>[ 321.097397] (2)[207:bat_thread_kthr][name:charging_hw_fan5405&]charging_set_input_current register_value=3
<4>[ 321.097415] (2)[207:bat_thread_kthr]------>along charging_set_input_current register_value=3
<4>[ 321.097433] (2)[207:bat_thread_kthr]!!!! charging_set_input_current, register_value = 0x3
<4>[ 321.099937] (3)[207:bat_thread_kthr]!!!! charging_set_current, current_value = 65000
<3>[ 321.105531] (2)[207:bat_thread_kthr][name:charging_hw_fan5405&]charging_set_current set_chr_current=65000
<3>[ 321.105560] (2)[207:bat_thread_kthr][name:charging_hw_fan5405&]charging_set_current register_value=1
<4>[ 321.114758] (1)[207:bat_thread_kthr]!!!!charging_set_cv_voltage, register_value = 0x2a
<3>[ 321.124985] (3)[207:bat_thread_kthr][name:fan5405&][fan5405]
可以从log中看到65000,这个就是主板温度太高限制的电流值。有些主板温度很容易升高。在没法改硬件的情况下,改温度策略。
工具:https://pan.baidu.com/s/1ZPuwf3JjZo0ttgGGrMN-zg
电池的NTC功能:硬件要加热敏电阻,用于判断温度,软件开下面的宏。
没有的话就只跑25°C
#ifdef CONFIG_MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION
#define FIXED_TBAT_25
#endif
[FAQ03930] [Thermal]平台电池60C高温保护机制
充电高温管控:
https://onlinesso.mediatek.com/FAQ#/SW/FAQ03930
./kernel-3.18/drivers/power/mediatek/battery_common.c
static void mt_battery_thermal_check(void)
{
if (BMT_status.temperature >= 60)
}
[FAQ05097] [BMT] 高温截至充电,低温恢复充电,软件修改方法:
https://onlinesso.mediatek.com/FAQ#/SW/FAQ05097
解决 显示“已插入电源,但是现在无法充电”,(mtk官网下的代码原是正常的,只是有同事修改改错了)
log: 从log信息中看到底层是正常的,上层如果也没改的话就是hal和传值上去的时候有问题
<3>[ 231.691550] (1)[201:bat_thread_kthr][name:battery_common&][BAT_thread]Cable out
<5>[ 231.691586] (1)[201:bat_thread_kthr][name:usb20&][MUSB]mt_usb_disconnect 560: issue work
<5>[ 231.691677] (1)[201:bat_thread_kthr][name:usb20&][MUSB]mt_usb_disconnect 562: [MUSB] USB disconnect
<5>[ 231.692218] (1)[172:kworker/u8:4][name:usb20&][MUSB]do_connection_work 475: is ready 1 is_host 0 power 0
<5>[ 231.692438] (1)[172:kworker/u8:4][name:usb20&][MUSB]usb_cable_connected 689: usb_cable_connected vbus_exist=0 type=0
<5>[ 231.692466] (1)[172:kworker/u8:4][name:usb20&][MUSB]usb_cable_connected 711: usb_cable_connected, connected:0, cable_mode:1 CABLE_MODE_NORMAL = 1
<5>[ 231.692489] -(1)[172:kworker/u8:4][name:usb20&][MUSB]do_connection_work 534: do nothing, usb_in:0, power:0
<3>[ 231.711543] (2)[201:bat_thread_kthr][name:battery_common&]AvgVbat=(4084,4044),AvgI=(0,0),VChr=94,AvgT=(24,25),SOC=(99,99),UI_SOC=99,ZCV=4135,CHR_Type=0 bcct:0:0 I:65000 Ibat:-613 fg:0
<3>[ 231.711613] (2)[201:bat_thread_kthr][name:battery_common&]UI_SOC=(99), resetBatteryMeter=(0)
kernel-3.18/drivers/power/mediatek/battery_common.c
old mode 100644
new mode 100755
index d3cd173..c7b283c
--- a/kernel-3.18/drivers/power/mediatek/battery_common.c
+++ b/kernel-3.18/drivers/power/mediatek/battery_common.c
@@ -255,7 +255,7 @@ extern unsigned int _g_bat_sleep_total_time;*/
* FOR ADB CMD
*/
/* Dual battery */
-int g_status_smb = POWER_SUPPLY_STATUS_NOT_CHARGING;
+int g_status_smb = POWER_SUPPLY_STATUS_DISCHARGING;
int g_capacity_smb = 50;
int g_present_smb = 0;
/* ADB charging CMD */
@@ -266,7 +266,7 @@ static int suspend_discharging = -1;
#if !defined(CONFIG_POWER_EXT)
static int is_uisoc_ever_100 = KAL_FALSE;
#endif
-#if defined(CONFIG_MTK_PUMP_EXPRESS_SUPPORT)
+#if defined(CONFIG_ONTIM_POWER_DRIVER)
kal_bool chargin_hw_init_done = KAL_FALSE;
#endif
/* // */
@@ -777,13 +777,13 @@ static struct battery_data battery_main = {
.BAT_batt_vol = 4200,
.BAT_batt_temp = 22,
/* Dual battery */
- .status_smb = POWER_SUPPLY_STATUS_NOT_CHARGING,
+ .status_smb = POWER_SUPPLY_STATUS_DISCHARGING,
.capacity_smb = 50,
.present_smb = 0,
/* ADB CMD discharging */
.adjust_power = -1,
#else
- .BAT_STATUS = POWER_SUPPLY_STATUS_NOT_CHARGING,
+ .BAT_STATUS = POWER_SUPPLY_STATUS_DISCHARGING,
.BAT_HEALTH = POWER_SUPPLY_HEALTH_GOOD,
.BAT_PRESENT = 1,
.BAT_TECHNOLOGY = POWER_SUPPLY_TECHNOLOGY_LION,
@@ -795,7 +795,7 @@ static struct battery_data battery_main = {
.BAT_batt_vol = 0,
.BAT_batt_temp = 0,
/* Dual battery */
- .status_smb = POWER_SUPPLY_STATUS_NOT_CHARGING,
+ .status_smb = POWER_SUPPLY_STATUS_DISCHARGING,
.capacity_smb = 50,
.present_smb = 0,
/* ADB CMD discharging */
@@ -1998,7 +1998,7 @@ static void battery_update(struct battery_data *bat_data)
} else { /* Only Battery */
- bat_data->BAT_STATUS = POWER_SUPPLY_STATUS_NOT_CHARGING;
+ bat_data->BAT_STATUS = POWER_SUPPLY_STATUS_DISCHARGING;
if (BMT_status.bat_vol <= batt_cust_data.v_0percent_tracking)
resetBatteryMeter = mt_battery_0Percent_tracking_check();
else
二、int boot_mode = get_boot_mode();用于区分开机/关机状态
#include <mt-plat/mtk_boot.h>