battery_common.c首先是进行电池驱动的一些初始化工作,之后调用函数
kthread_run(bat_thread_kthread,NULL, "bat_thread_kthread");创建一个线程。这个线程每10秒钟执行一次,里面会调用BAT_thread();在这个函数里面完成的电池驱动的大部分主要事务。
//Battery_common.c (drivers\kernel-3.18\drivers\power\mediatek)1548442017/11/1
void BAT_thread(void)
{
static kal_bool battery_meter_initilized = KAL_FALSE;
static int first_time_update;
if (battery_meter_initilized == KAL_FALSE) {
battery_meter_initial();/* move from battery_probe() to decrease booting time */
BMT_status.nPercent_ZCV = battery_meter_get_battery_nPercent_zcv();
battery_meter_initilized = KAL_TRUE;
}
mt_battery_charger_detect_check();
if (fg_battery_shutdown)
return;
mt_battery_GetBatteryData();
if (fg_battery_shutdown)
return;
if (BMT_status.charger_exist == KAL_TRUE)
check_battery_exist();
mt_battery_thermal_check();
mt_battery_notify_check();
if (first_time_update == 0) {
mt_battery_update_status();
if (BMT_status.charger_exist == KAL_TRUE) {
mt_battery_CheckBatteryStatus();
mt_battery_