static int axp_battery_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct axp_charger *charger; int ret = 0; charger = container_of(psy, struct axp_charger, batt); switch (psp) { case POWER_SUPPLY_PROP_STATUS: axp_battery_check_status(charger, val); break; case POWER_SUPPLY_PROP_HEALTH: axp_battery_check_health(charger, val); break; case POWER_SUPPLY_PROP_TECHNOLOGY: val->intval = charger->battery_info->technology; break; case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: val->intval = charger->battery_info->voltage_max_design; break; case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: val->intval = charger->battery_info->voltage_min_design; break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: val->intval = charger->vbat * 1000; break; case POWER_SUPPLY_PROP_CURRENT_NOW: val->intval = charger->ibat * 1000; break; case POWER_SUPPLY_PROP_MODEL_NAME: val->strval = charger->batt.name; break; case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: case POWER_SUPPLY_PROP_CHARGE_FULL: val->intval = charger->battery_info->charge_full_design; break; case POWER_SUPPLY_PROP_CAPACITY: val->intval = charger->rest_vol; break; case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: if(charger->bat_det && !(charger->is_on) && !(charger->ext_valid)) val->intval = charger->rest_time; else val->intval = 0; break; case POWER_SUPPLY_PROP_TIME_TO_FULL_NOW: if(charger->bat_det && charger->is_on) val->intval = charger->rest_time; else val->intval = 0; break; case POWER_SUPPLY_PROP_ONLINE: val->intval = (!charger->is_on)&&(charger->bat_det) && (! charger->ext_valid); break; case POWER_SUPPLY_PROP_PRESENT: val->intval = charger->bat_det; break; default: ret = -EINVAL; break; } return ret; }
static int axp_battery_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct axp_charger *charger; int ret = 0; charger = container_of(psy, struct axp_charger, batt); switch (psp) { case POWER_SUPPLY_PROP_STATUS: axp_battery_check_status(charger, val); break; case POWER_SUPPLY_PROP_HEALTH: axp_battery_check_health(charger, val); break; case POWER_SUPPLY_PROP_TECHNOLOGY: val->intval = charger->battery_info->technology; break; case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: val->intval = charger->battery_info->voltage_max_design; break; case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: val->intval = charger->battery_info->voltage_min_design; break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: //val->intval = charger->ocv * 1000; val->intval = charger->vbat * 1000; break; case POWER_SUPPLY_PROP_CURRENT_NOW: val->intval = charger->ibat * 1000; break; case POWER_SUPPLY_PROP_MODEL_NAME: val->strval = charger->batt.name; break; case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN: val->intval = charger->battery_info->energy_full_design; // DBG_PSY_MSG("POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN:%d\n",val->intval); break; case POWER_SUPPLY_PROP_CAPACITY: val->intval = charger->rest_vol; break; case POWER_SUPPLY_PROP_ONLINE: { /* in order to get hardware state, we must update charger state now. * by sunny at 2012-12-23 11:06:15. */ axp_charger_update_state(charger); val->intval = charger->bat_current_direction; if (charger->bat_temp > 50 || -5 < charger->bat_temp) val->intval = 0; break; } case POWER_SUPPLY_PROP_PRESENT: val->intval = charger->bat_det; break; case POWER_SUPPLY_PROP_TEMP: val->intval = charger->bat_temp * 10; break; default: ret = -EINVAL; break; } return ret; }