#include #include #include #include #include #include #include #include #include #include #include "cust_battery_meter.h" #include #include #include // ============================================================ // //define // ============================================================ // #define STATUS_OK 0 #define STATUS_FAIL 1 #define STATUS_UNSUPPORTED -1 #define GETARRAYNUM(array) (sizeof(array)/sizeof(array[0])) // ============================================================ // //global variable // ============================================================ // kal_bool chargin_hw_init_done = KAL_TRUE; kal_bool charging_type_det_done = KAL_TRUE; const kal_uint32 VBAT_CV_VTH[]= { BATTERY_VOLT_03_775000_V, BATTERY_VOLT_03_800000_V, BATTERY_VOLT_03_850000_V, BATTERY_VOLT_03_900000_V, BATTERY_VOLT_04_000000_V, BATTERY_VOLT_04_050000_V, BATTERY_VOLT_04_100000_V, BATTERY_VOLT_04_125000_V, BATTERY_VOLT_04_137500_V, BATTERY_VOLT_04_150000_V, BATTERY_VOLT_04_162500_V, BATTERY_VOLT_04_175000_V, BATTERY_VOLT_04_187500_V, BATTERY_VOLT_04_200000_V, BATTERY_VOLT_04_212500_V, BATTERY_VOLT_04_225000_V, BATTERY_VOLT_04_237500_V, BATTERY_VOLT_04_250000_V, BATTERY_VOLT_04_262500_V, BATTERY_VOLT_04_275000_V, BATTERY_VOLT_04_300000_V, BATTERY_VOLT_04_325000_V, BATTERY_VOLT_04_350000_V, BATTERY_VOLT_04_375000_V, BATTERY_VOLT_04_440000_V, BATTERY_VOLT_04_425000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V, BATTERY_VOLT_02_200000_V }; const kal_uint32 CS_VTH[]= { CHARGE_CURRENT_2000_00_MA, CHARGE_CURRENT_1600_00_MA, CHARGE_CURRENT_1500_00_MA, CHARGE_CURRENT_1350_00_MA, CHARGE_CURRENT_1200_00_MA, CHARGE_CURRENT_1100_00_MA, CHARGE_CURRENT_1000_00_MA, CHARGE_CURRENT_900_00_MA, CHARGE_CURRENT_800_00_MA, CHARGE_CURRENT_700_00_MA, CHARGE_CURRENT_650_00_MA, CHARGE_CURRENT_550_00_MA, CHARGE_CURRENT_450_00_MA, CHARGE_CURRENT_300_00_MA, CHARGE_CURRENT_200_00_MA, CHARGE_CURRENT_70_00_MA }; const kal_uint32 VCDT_HV_VTH[]= { BATTERY_VOLT_04_200000_V, BATTERY_VOLT_04_250000_V, BATTERY_VOLT_04_300000_V, BATTERY_VOLT_04_350000_V, BATTERY_VOLT_04_400000_V, BATTERY_VOLT_04_450000_V, BATTERY_VOLT_04_500000_V, BATTERY_VOLT_04_550000_V, BATTERY_VOLT_04_600000_V, BATTERY_VOLT_06_000000_V, BATTERY_VOLT_06_500000_V, BATTERY_VOLT_07_000000_V, BATTERY_VOLT_07_500000_V, BATTERY_VOLT_08_500000_V, BATTERY_VOLT_09_500000_V, BATTERY_VOLT_10_500000_V }; // ============================================================ // // function prototype // ============================================================ // // ============================================================ // //extern variable // ============================================================ // // ============================================================ // //extern function // ============================================================ // extern kal_uint32 upmu_get_reg_value(kal_uint32 reg); extern void Charger_Detect_Init(void); extern void Charger_Detect_Release(void); extern int hw_charging_get_charger_type(void); extern void mt_power_off(void); extern kal_uint32 mt6311_get_chip_id(void); extern int is_mt6311_exist(void); extern int is_mt6311_sw_ready(void); // ============================================================ // kal_uint32 charging_value_to_parameter(const kal_uint32 *parameter, const kal_uint32 array_size, const kal_uint32 val) { if (val < array_size) { return parameter[val]; } else { battery_log(BAT_LOG_CRTI, "Can't find the parameter \r\n"); return parameter[0]; } } kal_uint32 charging_parameter_to_value(const kal_uint32 *parameter, const kal_uint32 array_size, const kal_uint32 val) { kal_uint32 i; for(i=0;i 42) break; } } else { /* Set communication mode high/low current */ pmic_set_register_value(PMIC_RG_CM_CS_VTHH,0xa);/* 650mA */ pmic_set_register_value(PMIC_RG_CM_CS_VTHL,0xf);/* 70mA */ /* Set CM_VINC high period time (HPRD1, HPRD2) */ pmic_set_register_value(PMIC_RG_CM_VDEC_HPRD1,29);/* 100ms */ pmic_set_register_value(PMIC_RG_CM_VDEC_HPRD2,29);/* 100ms */ /* Set CM_VINC high period time (HPRD3, HPRD4) */ pmic_set_register_value(PMIC_RG_CM_VDEC_HPRD3,29);/* 300ms */ pmic_set_register_value(PMIC_RG_CM_VDEC_HPRD4,9);/* 300ms */ /* Set CM_VINC high period time (HPRD5, HPRD6) */ pmic_set_register_value(PMIC_RG_CM_VDEC_HPRD5,9);/* 300ms */ pmic_set_register_value(PMIC_RG_CM_VDEC_HPRD6,49);/* 500ms */ /* Enable CM_VINC interrupt */ //mt6325_upmu_set_rg_int_en_pchr_cm_vinc(0x1); pmic_set_register_value(PMIC_RG_INT_EN_PCHR_CM_VDEC,1); /* Select PCHR debug flag to monitor abnormal abort */ pmic_set_register_value(PMIC_RG_PCHR_FLAG_SEL,0x2e); /* Enable PCHR debug flag */ pmic_set_register_value(PMIC_RG_PCHR_FLAG_EN,0x1); /* Trigger CM VINC mode */ pmic_set_register_value(PMIC_RG_CM_VDEC_TRIG,0x1); /* wait for interrupt */ while(pmic_get_register_value(PMIC_PCHR_CM_VDEC_STATUS) != 1) { msleep(50); count++; if (count > 42) break; } } debug_val = pmic_get_register_value(PMIC_RGS_PCHR_FLAG_OUT); battery_log(BAT_LOG_CRTI, "[charging_set_ta_current_pattern] debug_val=0x%x cnt=%d\n", debug_val,count); if (count > 10 || debug_val != 0) { status = STATUS_FAIL; } return status; } static kal_uint32 charging_get_error_state(void *data) { return STATUS_UNSUPPORTED; } static kal_uint32 charging_set_error_state(void *data) { return STATUS_UNSUPPORTED; } static kal_uint32 (* const charging_func[CHARGING_CMD_NUMBER])(void *data)= { charging_hw_init ,charging_dump_register ,charging_enable ,charging_set_cv_voltage ,charging_get_current ,charging_set_current ,charging_set_input_current ,charging_get_charging_status ,charging_reset_watch_dog_timer ,charging_set_hv_threshold ,charging_get_hv_status ,charging_get_battery_status ,charging_get_charger_det_status ,charging_get_charger_type ,charging_get_is_pcm_timer_trigger ,charging_set_platform_reset ,charging_get_platfrom_boot_mode ,charging_set_power_off ,charging_get_power_source ,charging_get_csdac_full_flag ,charging_set_ta_current_pattern ,charging_set_error_state }; /* * FUNCTION * Internal_chr_control_handler * * DESCRIPTION * This function is called to set the charger hw * * CALLS * * PARAMETERS * None * * RETURNS * * * GLOBALS AFFECTED * None */ kal_int32 chr_control_interface(CHARGING_CTRL_CMD cmd, void *data) { kal_int32 status; if(cmd < CHARGING_CMD_NUMBER) status = charging_func[cmd](data); else return STATUS_UNSUPPORTED; return status; }