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; }
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; }
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); }
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; }