static int get_bat_sense_volt(int times) { if(g_bat_init_flag != 0) { return battery_meter_get_battery_voltage(); } return 0; }
static void charging_current_calibration(void) { kal_int32 bat_isense_offset; #if 0 kal_int32 bat_vol = battery_meter_get_battery_voltage(); kal_int32 Vsense = battery_meter_get_VSense(); bat_isense_offset = bat_vol - Vsense; battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] bat_vol=%d, Vsense=%d, offset=%d \r\n",bat_vol,Vsense,bat_isense_offset); #else bat_isense_offset = 0; #endif battery_meter_sync(bat_isense_offset); }
static void mtk_ta_BJT_check(void) { int curr_vbat = 0; int curr_current = 0; int vchr = 0; int watt = 0; int i=0,cnt=0; for(i=0;i<3;i++) { vchr = battery_meter_get_charger_voltage(); curr_vbat = battery_meter_get_battery_voltage(KAL_TRUE); curr_current = battery_meter_get_charging_current_imm(); watt = ((vchr - curr_vbat)*curr_current); battery_log(BAT_LOG_CRTI, "mtk_ta_BJT_check() vchr=%d, vbat=%d, current=%d, Watt=%d, ta_current_level=%d\n", vchr,curr_vbat,curr_current,watt, ta_current_level); if(watt > BJT_LIMIT)//1.2W { cnt++; } else { break; } msleep(200); } if(cnt>=3) { is_ta_connect = KAL_FALSE; } battery_log(BAT_LOG_CRTI, "mtk_ta_BJT_check() vchr=%d, vbat=%d, current=%d, Watt=%d, ta_current_level=%d cnt=%d\n", vchr,curr_vbat,curr_current,watt, ta_current_level,cnt); }
void select_charging_curret(void) { #ifdef MEIZU_M71 kal_uint32 charger_voltage = 0, sum_voltage = 0; int i; #endif if (g_ftm_battery_flag) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] FTM charging : %d\r\n", charging_level_data[0]); g_temp_CC_value = charging_level_data[0]; if(g_temp_CC_value == CHARGE_CURRENT_450_00_MA) { g_temp_input_CC_value = CHARGE_CURRENT_500_00_MA; } else { g_temp_input_CC_value = CHARGE_CURRENT_MAX; #ifdef MEIZU_M71 g_temp_CC_value = STANDARD_CHARGER_CURRENT; #else g_temp_CC_value = AC_CHARGER_CURRENT; #endif battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] set_ac_current \r\n"); } } else { if ( BMT_status.charger_type == STANDARD_HOST ) { #ifdef CONFIG_USB_IF { g_temp_input_CC_value = CHARGE_CURRENT_MAX; if (g_usb_state == USB_SUSPEND) { g_temp_CC_value = USB_CHARGER_CURRENT_SUSPEND; } else if (g_usb_state == USB_UNCONFIGURED) { g_temp_CC_value = USB_CHARGER_CURRENT_UNCONFIGURED; } else if (g_usb_state == USB_CONFIGURED) { g_temp_CC_value = USB_CHARGER_CURRENT_CONFIGURED; } else { g_temp_CC_value = USB_CHARGER_CURRENT_UNCONFIGURED; } battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] STANDARD_HOST CC mode charging : %d on %d state\r\n", g_temp_CC_value, g_usb_state); } #else { g_temp_input_CC_value = USB_CHARGER_CURRENT; g_temp_CC_value = USB_CHARGER_CURRENT; } #endif } else if (BMT_status.charger_type == NONSTANDARD_CHARGER) { g_temp_input_CC_value = NON_STD_AC_CHARGER_CURRENT; g_temp_CC_value = NON_STD_AC_CHARGER_CURRENT; } #ifdef MEIZU_M71 #ifdef MEIZU_M79 else if (BMT_status.charger_type == MEIZU_2_0A_CHARGER) { g_temp_input_CC_value = MEIZU_2_0A_CHARGER_CURRENT; g_temp_CC_value = MEIZU_2_0A_CHARGER_CURRENT; } else if (BMT_status.charger_type == STANDARD_CHARGER) { g_temp_input_CC_value = MEIZU_1_5A_CHARGER_CURRENT; g_temp_CC_value = MEIZU_1_5A_CHARGER_CURRENT; battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value); msleep(100); for (i=0; i<5; i++) { battery_meter_get_battery_voltage(TRUE); charger_voltage = battery_meter_get_charger_voltage(); sum_voltage += charger_voltage; msleep(10); } charger_voltage = sum_voltage / 5; if (charger_voltage <= CHARGER_CURRENT_1_2A_THRESHOLD) { g_temp_CC_value = STANDARD_CHARGER_CURRENT; } else { g_temp_CC_value = MEIZU_1_5A_CHARGER_CURRENT; g_temp_input_CC_value = MEIZU_1_5A_CHARGER_CURRENT ; } } else if (BMT_status.charger_type == CHARGING_HOST) { g_temp_input_CC_value = CHARGING_HOST_CHARGER_CURRENT; g_temp_CC_value = CHARGING_HOST_CHARGER_CURRENT; } else if (BMT_status.charger_type == APPLE_CHARGER) { g_temp_input_CC_value = APPLE_2_1A_CHARGER_CURRENT; g_temp_CC_value = APPLE_2_1A_CHARGER_CURRENT; battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value); msleep(100); for (i=0; i<5; i++) { charger_voltage = battery_meter_get_charger_voltage(); sum_voltage += charger_voltage; msleep(10); } charger_voltage = sum_voltage / 5; if (charger_voltage < CHARGER_CURRENT_1_2A_THRESHOLD) { g_temp_CC_value = APPLE_1_0A_CHARGER_CURRENT; } else { g_temp_CC_value = APPLE_2_1A_CHARGER_CURRENT; g_temp_input_CC_value = APPLE_2_1A_CHARGER_CURRENT ; } } else if (BMT_status.charger_type == U200_CHARGER) { g_temp_input_CC_value = U200_1A_CHARGER_CURRENT; g_temp_CC_value = U200_1A_CHARGER_CURRENT; } else { g_temp_input_CC_value = USB_CHARGER_CURRENT; g_temp_CC_value = USB_CHARGER_CURRENT; } #else else if (BMT_status.charger_type == MEIZU_2_0A_CHARGER) { g_temp_input_CC_value = MEIZU_2_0A_CHARGER_CURRENT; g_temp_CC_value = MEIZU_2_0A_CHARGER_CURRENT; } else if (BMT_status.charger_type == STANDARD_CHARGER) { g_temp_input_CC_value = MEIZU_2_0A_CHARGER_CURRENT; g_temp_CC_value = MEIZU_2_0A_CHARGER_CURRENT; battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value); msleep(100); for (i=0; i<5; i++) { battery_meter_get_battery_voltage(TRUE); charger_voltage = battery_meter_get_charger_voltage(); sum_voltage += charger_voltage; msleep(10); } charger_voltage = sum_voltage / 5; if(mz_get_hw_version() >= 20) charger_voltage -= 15 ; if(mz_get_operator_type() == 1) charger_voltage += 30 ; //for china mobile if (charger_voltage <= CHARGER_CURRENT_1A_THRESHOLD) { g_temp_CC_value = STANDARD_CHARGER_CURRENT; } else if (charger_voltage <= CHARGER_CURRENT_1_2A_THRESHOLD){ g_temp_CC_value = MEIZU_1_5A_CHARGER_CURRENT; } else { g_temp_CC_value = MEIZU_2_0A_CHARGER_CURRENT; g_temp_input_CC_value = CHARGE_CURRENT_2000_00_MA ; } } else if (BMT_status.charger_type == CHARGING_HOST) { g_temp_input_CC_value = CHARGING_HOST_CHARGER_CURRENT; g_temp_CC_value = CHARGING_HOST_CHARGER_CURRENT; } else if (BMT_status.charger_type == APPLE_CHARGER) { g_temp_input_CC_value = APPLE_2_1A_CHARGER_CURRENT; g_temp_CC_value = APPLE_2_1A_CHARGER_CURRENT; battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value); msleep(100); for (i=0; i<5; i++) { charger_voltage = battery_meter_get_charger_voltage(); sum_voltage += charger_voltage; msleep(10); } charger_voltage = sum_voltage / 5; if(mz_get_hw_version() >= 20) charger_voltage -= 15 ; if(mz_get_operator_type() == 1) charger_voltage += 30 ; //for china mobile charger_voltage += 5 ; if (charger_voltage < CHARGER_CURRENT_1A_THRESHOLD) { g_temp_CC_value = APPLE_1_0A_CHARGER_CURRENT; } else { g_temp_CC_value = APPLE_2_1A_CHARGER_CURRENT; g_temp_input_CC_value = CHARGE_CURRENT_2000_00_MA ; } } else if (BMT_status.charger_type == U200_CHARGER) { g_temp_input_CC_value = U200_1A_CHARGER_CURRENT; g_temp_CC_value = U200_1A_CHARGER_CURRENT; } else { g_temp_input_CC_value = USB_CHARGER_CURRENT; g_temp_CC_value = USB_CHARGER_CURRENT; } #endif #else else if (BMT_status.charger_type == STANDARD_CHARGER)
static void battery_pump_express_algorithm_start(void) { int ta_v_chr_candidate[4]={0,0,0,0}; int ta_charging_current_candidate[4]={0,0,0,0}; int max_charging_current = 0; int max_charging_current_i = 0; int curr_vbat = 0; int i = 0; int ta_cv_vchr; kal_uint32 cv_voltage; if(batt_cust_data.high_battery_voltage_support) cv_voltage = 4350; else cv_voltage = 4200; mutex_lock(&ta_mutex); wake_lock(&TA_charger_suspend_lock); if(is_ta_connect == KAL_TRUE) { battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm() start\n"); curr_vbat = battery_meter_get_battery_voltage(KAL_TRUE); if( ((curr_vbat-ta_pre_vbat)>100) && (curr_vbat < (cv_voltage - (CV_CHECK_DELAT_FOR_BANDGAP+20))) && (curr_vbat > TA_START_VCHR_TUNUNG_VOLTAGE) ) { /*cv -0.12V && to avoid screen flash( VBAT less than 3.7V) */ ta_pre_vbat = curr_vbat; select_v_chr_candidate(curr_vbat, ta_v_chr_candidate); if(first_vchr_det == KAL_TRUE) { for(i=3 ; i>=1 ; i--) { /* measure VBAT+0.8V, VBAT+0.6V then VBAT+0.4V */ if(ta_cable_out_occur == KAL_FALSE) mtk_ta_vchr_select(i,ta_v_chr_candidate,ta_charging_current_candidate,&max_charging_current,&max_charging_current_i); } first_vchr_det = KAL_FALSE; } else { for(i=1 ; i<=3 ; i++) { /* measure VBAT+0.4V,VBAT+0.6V then VBAT+0.8V */ if(ta_cable_out_occur == KAL_FALSE) mtk_ta_vchr_select(i,ta_v_chr_candidate,ta_charging_current_candidate,&max_charging_current,&max_charging_current_i); } } battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm() candidate=%d,%d,%d,%d ; i=%d,%d,%d,%d ; max_charging_current_i=%d\n", ta_v_chr_candidate[0], ta_v_chr_candidate[1], ta_v_chr_candidate[2], ta_v_chr_candidate[3], ta_charging_current_candidate[0], ta_charging_current_candidate[1], ta_charging_current_candidate[2],ta_charging_current_candidate[3], max_charging_current_i ); mtk_tuning_voltage(ta_current_level, ta_v_chr_candidate[max_charging_current_i]); ta_vchr_tuning = KAL_TRUE; ta_check_ta_control = KAL_TRUE; } else if(curr_vbat >= (cv_voltage - (CV_CHECK_DELAT_FOR_BANDGAP+20))) { if(cv_voltage == 4200) ta_cv_vchr = 4800; else // cv 4.35V ta_cv_vchr = 5000; if(ta_current_level != ta_cv_vchr) { mtk_tuning_voltage(ta_current_level, ta_cv_vchr); } ta_vchr_tuning = KAL_TRUE; ta_check_ta_control = KAL_FALSE; battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm(),curr_vbat > cv_voltage, ta_current_level=%d, cv_voltage=%d, ta_cv_vchr=%d,",ta_current_level,cv_voltage,ta_cv_vchr); } /* --for normal charging */ if((is_ta_connect == KAL_TRUE) && (curr_vbat > TA_START_VCHR_TUNUNG_VOLTAGE) &&(ta_check_ta_control == KAL_TRUE)) { /* to avoid screen flash( VBAT less than 3.7V) */ battery_charging_control(CHARGING_CMD_SET_CURRENT,&ta_charging_current); /* 1.5A */ battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm() : detect TA, use 1.5A for normal charging, curr_vbat=%d, ta_pre_vbat=%d, ta_current_level=%d\n", curr_vbat, ta_pre_vbat, ta_current_level); //msleep(1500); } //------------------------ mtk_ta_BJT_check(); battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm() end\n"); } else { battery_log(BAT_LOG_CRTI, "It's not a TA charger, bypass TA algorithm\n"); } wake_unlock(&TA_charger_suspend_lock); mutex_unlock(&ta_mutex); }