Beispiel #1
0
static inline int acpi_battery_scale(struct acpi_battery *battery)
{
	return (acpi_battery_mode(battery) ? 10 : 1) *
	    acpi_battery_ipscale(battery);
}
Beispiel #2
0
static int acpi_sbs_battery_get_property(struct power_supply *psy,
        enum power_supply_property psp,
        union power_supply_propval *val)
{
    struct acpi_battery *battery = to_acpi_battery(psy);

    if ((!battery->present) && psp != POWER_SUPPLY_PROP_PRESENT)
        return -ENODEV;

    acpi_battery_get_state(battery);
    switch (psp) {
    case POWER_SUPPLY_PROP_STATUS:
        if (battery->rate_now < 0)
            val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
        else if (battery->rate_now > 0)
            val->intval = POWER_SUPPLY_STATUS_CHARGING;
        else
            val->intval = POWER_SUPPLY_STATUS_FULL;
        break;
    case POWER_SUPPLY_PROP_PRESENT:
        val->intval = battery->present;
        break;
    case POWER_SUPPLY_PROP_TECHNOLOGY:
        val->intval = acpi_battery_technology(battery);
        break;
    case POWER_SUPPLY_PROP_CYCLE_COUNT:
        val->intval = battery->cycle_count;
        break;
    case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
        val->intval = battery->design_voltage *
                      acpi_battery_vscale(battery) * 1000;
        break;
    case POWER_SUPPLY_PROP_VOLTAGE_NOW:
        val->intval = battery->voltage_now *
                      acpi_battery_vscale(battery) * 1000;
        break;
    case POWER_SUPPLY_PROP_CURRENT_NOW:
    case POWER_SUPPLY_PROP_POWER_NOW:
        val->intval = abs(battery->rate_now) *
                      acpi_battery_ipscale(battery) * 1000;
        val->intval *= (acpi_battery_mode(battery)) ?
                       (battery->voltage_now *
                        acpi_battery_vscale(battery) / 1000) : 1;
        break;
    case POWER_SUPPLY_PROP_CURRENT_AVG:
    case POWER_SUPPLY_PROP_POWER_AVG:
        val->intval = abs(battery->rate_avg) *
                      acpi_battery_ipscale(battery) * 1000;
        val->intval *= (acpi_battery_mode(battery)) ?
                       (battery->voltage_now *
                        acpi_battery_vscale(battery) / 1000) : 1;
        break;
    case POWER_SUPPLY_PROP_CAPACITY:
        val->intval = battery->state_of_charge;
        break;
    case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
    case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN:
        val->intval = battery->design_capacity *
                      acpi_battery_scale(battery) * 1000;
        break;
    case POWER_SUPPLY_PROP_CHARGE_FULL:
    case POWER_SUPPLY_PROP_ENERGY_FULL:
        val->intval = battery->full_charge_capacity *
                      acpi_battery_scale(battery) * 1000;
        break;
    case POWER_SUPPLY_PROP_CHARGE_NOW:
    case POWER_SUPPLY_PROP_ENERGY_NOW:
        val->intval = battery->capacity_now *
                      acpi_battery_scale(battery) * 1000;
        break;
    case POWER_SUPPLY_PROP_TEMP:
        val->intval = battery->temp_now - 2730;	// dK -> dC
        break;
    case POWER_SUPPLY_PROP_MODEL_NAME:
        val->strval = battery->device_name;
        break;
    case POWER_SUPPLY_PROP_MANUFACTURER:
        val->strval = battery->manufacturer_name;
        break;
    default:
        return -EINVAL;
    }
    return 0;
}