Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}