static int mc13892_battery_read_status(struct mc13892_dev_info *di) { int retval; int coulomb; retval = pmic_get_batt_voltage(&(di->voltage_raw)); if (retval == 0) di->voltage_uV = di->voltage_raw * PMIC_BAT_VOLTAGE_UNIT_UV; retval = pmic_get_batt_current(&(di->current_raw)); if (retval == 0) { if (di->current_raw & 0x200) di->current_uA = (0x1FF - (di->current_raw & 0x1FF)) * PMIC_BAT_CURRENT_UNIT_UA * (-1); else di->current_uA = (di->current_raw & 0x1FF) * PMIC_BAT_CURRENT_UNIT_UA; } retval = pmic_get_charger_coulomb(&coulomb); if (retval == 0) di->accum_current_uAh = COULOMB_TO_UAH(coulomb); else di->accum_current_uAh = -1; return retval; }
static int mc13892_battery_read_status(struct mc13892_dev_info *di) { int retval; #ifdef CONFIG_MACH_MX51_ERDOS /* set voltage */ retval = pmic_get_batt_voltage(&(di->voltage_raw), 0); if (retval == 0) { di->voltage_uV = di->voltage_raw * 1000; /* mV -> uV */ } #else int coulomb; retval = pmic_get_batt_voltage(&(di->voltage_raw)); if (retval == 0) di->voltage_uV = di->voltage_raw * BAT_VOLTAGE_UNIT_UV; retval = pmic_get_batt_current(&(di->current_raw)); if (retval == 0) { if (di->current_raw & 0x200) di->current_uA = (0x1FF - (di->current_raw & 0x1FF)) * BAT_CURRENT_UNIT_UA * (-1); else di->current_uA = (di->current_raw & 0x1FF) * BAT_CURRENT_UNIT_UA; } retval = pmic_get_charger_coulomb(&coulomb); if (retval == 0) di->accum_current_uAh = COULOMB_TO_UAH(coulomb); #endif /* CONFIG_MACH_MX51_ERDOS */ return retval; }
int get_battery_mA(void) /* get charging current float into battery */ { unsigned short value=0; int bat_curr=0; int bat_cur=0; int chargerState=0; bool bPoweroffProcessSign = false; pmic_get_batt_current(&value); bat_curr = ((value&0x200) ? (value|0xfffffc00) : value); bat_curr = (bat_curr*3000)/512; ////wen add ,only for test, if((-bat_curr) >= 0){ bat_cur = (-bat_curr); }else{ chargerState =get_charger_state(); if(chargerState == 1){ bat_cur = 0; }else{ ///power off,only executed once ////whether check the battaty voltage ? if((!bPoweroffProcessSign) && (get_battery_mV()< 3400)){ pr_notice("Charger current < 0 and Battery voltage < 3.4v, Power off \n"); // orderly_poweroff(1); kernel_power_off(); bPoweroffProcessSign = true; } } } return bat_cur; }