PMU_STATUS do_jeita_state_machine(void) { int previous_g_temp_status; BATTERY_VOLTAGE_ENUM cv_voltage; previous_g_temp_status = g_temp_status; /* JEITA battery temp Standard */ if (BMT_status.temperature >= TEMP_POS_60_THRESHOLD) { battery_log(BAT_LOG_CRTI, "[BATTERY] Battery Over high Temperature(%d) !!\n\r", TEMP_POS_60_THRESHOLD); g_temp_status = TEMP_ABOVE_POS_60; return PMU_STATUS_FAIL; } else if (BMT_status.temperature > TEMP_POS_45_THRESHOLD) { if ((g_temp_status == TEMP_ABOVE_POS_60) && (BMT_status.temperature >= TEMP_POS_60_THRES_MINUS_X_DEGREE)) { /*battery_log(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d,not allow charging yet!!\n\r", TEMP_POS_60_THRES_MINUS_X_DEGREE, TEMP_POS_60_THRESHOLD); */ return PMU_STATUS_FAIL; } else { /* battery_log(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d !!\n\r", TEMP_POS_45_THRESHOLD, TEMP_POS_60_THRESHOLD); */ g_temp_status = TEMP_POS_45_TO_POS_60; g_jeita_recharging_voltage = JEITA_TEMP_POS_45_TO_POS_60_RECHARGE_VOLTAGE; v_cc2topoff_threshold = JEITA_TEMP_POS_45_TO_POS_60_CC2TOPOFF_THRESHOLD; charging_full_current = batt_cust_data.charging_full_current; } } else if (BMT_status.temperature >= TEMP_POS_10_THRESHOLD) { if (((g_temp_status == TEMP_POS_45_TO_POS_60) && (BMT_status.temperature >= TEMP_POS_45_THRES_MINUS_X_DEGREE)) || ((g_temp_status == TEMP_POS_0_TO_POS_10) && (BMT_status.temperature <= TEMP_POS_10_THRES_PLUS_X_DEGREE))) { pr_debug(BAT_LOG_CRTI, "[BATTERY] Battery Temperature not recovery to normal temperature charging mode yet!!\n\r"); } else { /* battery_log(BAT_LOG_CRTI, "[BATTERY] Battery Normal Temperature between %d and %d !!\n\r", TEMP_POS_10_THRESHOLD, TEMP_POS_45_THRESHOLD); */ g_temp_status = TEMP_POS_10_TO_POS_45; if(batt_cust_data.high_battery_voltage_support) g_jeita_recharging_voltage = 4200; else g_jeita_recharging_voltage = JEITA_TEMP_POS_10_TO_POS_45_RECHARGE_VOLTAGE; v_cc2topoff_threshold = JEITA_TEMP_POS_10_TO_POS_45_CC2TOPOFF_THRESHOLD; charging_full_current = batt_cust_data.charging_full_current; } } else if (BMT_status.temperature >= TEMP_POS_0_THRESHOLD) { if ((g_temp_status == TEMP_NEG_10_TO_POS_0 || g_temp_status == TEMP_BELOW_NEG_10) && (BMT_status.temperature <= TEMP_POS_0_THRES_PLUS_X_DEGREE)) { if (g_temp_status == TEMP_NEG_10_TO_POS_0) { pr_debug(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d !!\n\r", TEMP_POS_0_THRES_PLUS_X_DEGREE, TEMP_POS_10_THRESHOLD); } if (g_temp_status == TEMP_BELOW_NEG_10) { /* battery_log(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d,not allow charging yet!!\n\r", TEMP_POS_0_THRESHOLD, TEMP_POS_0_THRES_PLUS_X_DEGREE); */ return PMU_STATUS_FAIL; } } else { /* battery_log(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d !!\n\r", TEMP_POS_0_THRESHOLD, TEMP_POS_10_THRESHOLD); */ g_temp_status = TEMP_POS_0_TO_POS_10; g_jeita_recharging_voltage = JEITA_TEMP_POS_0_TO_POS_10_RECHARGE_VOLTAGE; v_cc2topoff_threshold = JEITA_TEMP_POS_0_TO_POS_10_CC2TOPOFF_THRESHOLD; charging_full_current = batt_cust_data.charging_full_current; } } else if (BMT_status.temperature >= TEMP_NEG_10_THRESHOLD) { if ((g_temp_status == TEMP_BELOW_NEG_10) && (BMT_status.temperature <= TEMP_NEG_10_THRES_PLUS_X_DEGREE)) { battery_log(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d,not allow charging yet!!\n\r", TEMP_NEG_10_THRESHOLD, TEMP_NEG_10_THRES_PLUS_X_DEGREE); return PMU_STATUS_FAIL; } else { /* battery_log(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d !!\n\r", TEMP_NEG_10_THRESHOLD, TEMP_POS_0_THRESHOLD); */ g_temp_status = TEMP_NEG_10_TO_POS_0; g_jeita_recharging_voltage = JEITA_TEMP_NEG_10_TO_POS_0_RECHARGE_VOLTAGE; v_cc2topoff_threshold = JEITA_TEMP_NEG_10_TO_POS_0_CC2TOPOFF_THRESHOLD; charging_full_current = JEITA_NEG_10_TO_POS_0_FULL_CURRENT; } } else { /* battery_log(BAT_LOG_CRTI, "[BATTERY] Battery below low Temperature(%d) !!\n\r", TEMP_NEG_10_THRESHOLD); */ g_temp_status = TEMP_BELOW_NEG_10; return PMU_STATUS_FAIL; } /* set CV after temperature changed */ if (g_temp_status != previous_g_temp_status) { cv_voltage = select_jeita_cv(); battery_charging_control(CHARGING_CMD_SET_CV_VOLTAGE, &cv_voltage); } return PMU_STATUS_OK; }
PMU_STATUS do_jeita_state_machine(void) { BATTERY_VOLTAGE_ENUM cv_voltage; //JEITA battery temp Standard if (BMT_status.temperature >= TEMP_POS_60_THRESHOLD) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Over high Temperature(%d) !!\n\r", TEMP_POS_60_THRESHOLD); g_temp_status = TEMP_ABOVE_POS_60; return PMU_STATUS_FAIL; } else if(BMT_status.temperature > TEMP_POS_45_THRESHOLD) //control 45c to normal behavior { if((g_temp_status == TEMP_ABOVE_POS_60) && (BMT_status.temperature >= TEMP_POS_60_THRES_MINUS_X_DEGREE)) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d,not allow charging yet!!\n\r", TEMP_POS_60_THRES_MINUS_X_DEGREE,TEMP_POS_60_THRESHOLD); return PMU_STATUS_FAIL; } else { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d !!\n\r", TEMP_POS_45_THRESHOLD,TEMP_POS_60_THRESHOLD); g_temp_status = TEMP_POS_45_TO_POS_60; } } else if(BMT_status.temperature >= TEMP_POS_10_THRESHOLD) { if( ((g_temp_status == TEMP_POS_45_TO_POS_60) && (BMT_status.temperature >= TEMP_POS_45_THRES_MINUS_X_DEGREE)) || ((g_temp_status == TEMP_POS_0_TO_POS_10 ) && (BMT_status.temperature <= TEMP_POS_10_THRES_PLUS_X_DEGREE ))) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Temperature not recovery to normal temperature charging mode yet!!\n\r"); } else { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Normal Temperature between %d and %d !!\n\r", TEMP_POS_10_THRESHOLD,TEMP_POS_45_THRESHOLD); g_temp_status = TEMP_POS_10_TO_POS_45; } } else if(BMT_status.temperature >= TEMP_POS_0_THRESHOLD) { if((g_temp_status == TEMP_NEG_10_TO_POS_0 || g_temp_status == TEMP_BELOW_NEG_10) && (BMT_status.temperature <= TEMP_POS_0_THRES_PLUS_X_DEGREE)) { if (g_temp_status == TEMP_NEG_10_TO_POS_0) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d !!\n\r", TEMP_POS_0_THRES_PLUS_X_DEGREE,TEMP_POS_10_THRESHOLD); } if (g_temp_status == TEMP_BELOW_NEG_10) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d,not allow charging yet!!\n\r", TEMP_POS_0_THRESHOLD,TEMP_POS_0_THRES_PLUS_X_DEGREE); return PMU_STATUS_FAIL; } } else { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d !!\n\r", TEMP_POS_0_THRESHOLD,TEMP_POS_10_THRESHOLD); g_temp_status = TEMP_POS_0_TO_POS_10; } } else if(BMT_status.temperature >= TEMP_NEG_10_THRESHOLD) { if((g_temp_status == TEMP_BELOW_NEG_10) && (BMT_status.temperature <= TEMP_NEG_10_THRES_PLUS_X_DEGREE)) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d,not allow charging yet!!\n\r", TEMP_NEG_10_THRESHOLD,TEMP_NEG_10_THRES_PLUS_X_DEGREE); return PMU_STATUS_FAIL; } else { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery Temperature between %d and %d !!\n\r", TEMP_NEG_10_THRESHOLD,TEMP_POS_0_THRESHOLD); g_temp_status = TEMP_NEG_10_TO_POS_0; } } else { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Battery below low Temperature(%d) !!\n\r", TEMP_NEG_10_THRESHOLD); g_temp_status = TEMP_BELOW_NEG_10; return PMU_STATUS_FAIL; } //set CV after temperature changed cv_voltage = select_jeita_cv(); battery_charging_control(CHARGING_CMD_SET_CV_VOLTAGE,&cv_voltage); return PMU_STATUS_OK; }
static void pchr_turn_on_charging (void) { BATTERY_VOLTAGE_ENUM cv_voltage; kal_uint32 charging_enable = KAL_TRUE; if ( BMT_status.bat_charging_state == CHR_ERROR ) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Charger Error, turn OFF charging !\n"); charging_enable = KAL_FALSE; } else if( (get_boot_mode()==META_BOOT) || (get_boot_mode()==ADVMETA_BOOT) ) { battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] In meta or advanced meta mode, disable charging.\n"); charging_enable = KAL_FALSE; } else { /*HW initialization*/ battery_charging_control(CHARGING_CMD_INIT,NULL); battery_xlog_printk(BAT_LOG_FULL, "charging_hw_init\n" ); /* Set Charging Current */ if (g_bcct_flag == 1) { select_charging_curret_bcct(); battery_xlog_printk(BAT_LOG_FULL, "[BATTERY] select_charging_curret_bcct !\n"); } else { select_charging_curret(); battery_xlog_printk(BAT_LOG_FULL, "[BATTERY] select_charging_curret !\n"); } if( g_temp_CC_value == CHARGE_CURRENT_0_00_MA || g_temp_input_CC_value == CHARGE_CURRENT_0_00_MA) { charging_enable = KAL_FALSE; battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] charging current is set 0mA, turn off charging !\r\n"); } else { battery_charging_control(CHARGING_CMD_SET_INPUT_CURRENT,&g_temp_input_CC_value); battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value); /*Set CV Voltage*/ #if defined(MTK_JEITA_STANDARD_SUPPORT) cv_voltage = select_jeita_cv(); #else cv_voltage = BATTERY_VOLT_04_200000_V; #endif /*Set CV Voltage*/ battery_charging_control(CHARGING_CMD_SET_CV_VOLTAGE,&cv_voltage); } } /* enable/disable charging */ battery_charging_control(CHARGING_CMD_ENABLE,&charging_enable); battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] pchr_turn_on_charging(), enable =%d !\r\n", charging_enable); }