static int twl6030_bci_battery_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct twl6030_bci_device_info *di; di = to_twl6030_bci_device_info(psy); switch (psp) { case POWER_SUPPLY_PROP_STATUS: switch (di->state) { case STATE_USB: case STATE_AC: case STATE_FULL: /* TODO ?? */ val->intval = POWER_SUPPLY_STATUS_CHARGING; break; default: val->intval = POWER_SUPPLY_STATUS_DISCHARGING; } break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: val->intval = twl6030_get_battery_voltage(di) * 1000; break; case POWER_SUPPLY_PROP_CURRENT_NOW: twl6030battery_current(di); val->intval = di->current_uA; break; case POWER_SUPPLY_PROP_CHARGE_COUNTER: val->intval = di->capacity_uAh; break; case POWER_SUPPLY_PROP_TEMP: val->intval = 275; // simulate a healthy battery temp break; case POWER_SUPPLY_PROP_ONLINE: val->intval = 1; break; case POWER_SUPPLY_PROP_CURRENT_AVG: val->intval = di->current_avg_uA; break; case POWER_SUPPLY_PROP_HEALTH: val->intval = di->bat_health; break; case POWER_SUPPLY_PROP_CAPACITY: val->intval = di->capacity; break; default: return -EINVAL; } return 0; }
static void twl6030_bci_battery_read_status(struct twl6030_bci_device_info *di) { di->temp_C = twl6030battery_temperature(); di->voltage_uV = twl6030battery_voltage(); di->current_uA = twl6030battery_current(); }