Example #1
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;
}
Example #2
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;
}
Example #3
0
int get_battery_mV(void)
{
	unsigned short value=0;
	
	pmic_get_batt_voltage(&value);

	return  (value*PMIC_BAT_VOLTAGE_UNIT_UV/PMIC_CHG_VOLTAGE_CORT);
}
Example #4
0
static int mc13892_charger_get_property(struct power_supply *psy,
				       enum power_supply_property psp,
				       union power_supply_propval *val)
{
	struct mc13892_dev_info *di =
		container_of((psy), struct mc13892_dev_info, charger);

	switch (psp) {
	case POWER_SUPPLY_PROP_ONLINE:
		val->intval = di->charger_online;
		return 0;
#ifdef CONFIG_MACH_MX51_ERDOS
	case POWER_SUPPLY_PROP_STATUS:
		if ( di->charger_online == 0 ) {	/* AC off */
			val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
		} else {				/* AC on */
			int stat = gpio_charge_status();
			switch (stat) {
			case 0x1: /* STAT2: charged */
				val->intval = POWER_SUPPLY_STATUS_FULL;
				break;
			case 0x2: /* STAT1: now charging */
				val->intval = POWER_SUPPLY_STATUS_CHARGING;
				break;
			default:
				val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
				break;
			}
		}
 		return 0;
	case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
		val->intval = BQ24105_BATTERY_VOLTAGE_MAX;
		return 0;
	case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
		val->intval = BQ24105_BATTERY_VOLTAGE_MIN;
		return 0;
	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
		{
			unsigned short voltage = 0;
			pmic_get_batt_voltage (&voltage, 0);
			val->intval = voltage;		/* mV */
			return 0;
		}
		break;
	case POWER_SUPPLY_PROP_CAPACITY:
		{
			/*
			 * BATT life temp
			 */
			unsigned short    voltage = 0;
			int               raw = batt_cap [0].raw;
			struct _batt_cap *tbl = &(batt_cap [0]);
			int               i, mx;
			pmic_get_batt_voltage (&voltage, &raw);
			mx = sizeof(batt_cap) / sizeof(struct _batt_cap);
			for ( i = 0 ; i < mx ; i++ , tbl++ ) {
				if (tbl->raw <= raw) {
					val->intval = tbl->cap;
					break;
				}
			}
			return 0;
		}
		break;
#endif /* CONFIG_MACH_MX51_ERDOS */
	default:
		break;
	}
	return -EINVAL;
}