diff options
| author | Bruno Ducrot <bruno@FreeBSD.org> | 2006-01-12 21:56:37 +0000 |
|---|---|---|
| committer | Bruno Ducrot <bruno@FreeBSD.org> | 2006-01-12 21:56:37 +0000 |
| commit | ab033fa0e375dda4154da0c673a756fd9d5d1b3e (patch) | |
| tree | 46d1ee321e7daa8c2f69d14fe54b9f97a4f43747 /sys/dev | |
| parent | 04b3fa1623aaa58eb5cf748f849fa645f93c56b9 (diff) | |
Notes
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/acpica/acpi_smbat.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/sys/dev/acpica/acpi_smbat.c b/sys/dev/acpica/acpi_smbat.c index 39bfb3ccc14f..4383e21a78c0 100644 --- a/sys/dev/acpica/acpi_smbat.c +++ b/sys/dev/acpica/acpi_smbat.c @@ -341,27 +341,28 @@ acpi_smbat_get_bst(device_t dev, struct acpi_bst *bst) if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_BATTERY_STATUS, &val)) goto out; - if (val & SMBATT_BS_DISCHARGING) { + sc->bst.state = 0; + if (val & SMBATT_BS_DISCHARGING) sc->bst.state |= ACPI_BATT_STAT_DISCHARG; - /* - * If the rate is negative, it is discharging. Otherwise, - * it is charging. - */ - if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_AT_RATE, &val)) - goto out; - if (val < 0) - sc->bst.rate = (-val) * factor; - else - sc->bst.rate = -1; - } else { - sc->bst.state |= ACPI_BATT_STAT_CHARGING; - sc->bst.rate = -1; - } - if (val & SMBATT_BS_REMAINING_CAPACITY_ALARM) sc->bst.state |= ACPI_BATT_STAT_CRITICAL; + /* + * If the rate is negative, it is discharging. Otherwise, + * it is charging. + */ + if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_CURRENT, &val)) + goto out; + + if (val > 0) { + sc->bst.rate = val * factor; + sc->bst.state |= ACPI_BATT_STAT_CHARGING; + } else if (val < 0) + sc->bst.rate = (-val) * factor; + else + sc->bst.rate = 0; + if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_REMAINING_CAPACITY, &val)) goto out; sc->bst.cap = val * factor; |
