diff options
| author | jruoho <jruoho@NetBSD.org> | 2010-03-17 09:21:50 +0000 |
|---|---|---|
| committer | jruoho <jruoho@NetBSD.org> | 2010-03-17 09:21:50 +0000 |
| commit | dce0020d0cbd8675abfa9241df872573cd7c521a (patch) | |
| tree | 79521ab4852fb91b07f23ec452796705b1f4e066 /sys/dev | |
| parent | febc76c6be71d6a8b954828592d6582c0c0e1f33 (diff) | |
Remove the technology "sensor" (a fixed constant). Report this information
in an improved output when the battery information changes (i.e. device
attachment or battery removal/insertion).
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/acpi/acpi_bat.c | 97 |
1 files changed, 52 insertions, 45 deletions
diff --git a/sys/dev/acpi/acpi_bat.c b/sys/dev/acpi/acpi_bat.c index 27d1e19fa28..e1f51a98d90 100644 --- a/sys/dev/acpi/acpi_bat.c +++ b/sys/dev/acpi/acpi_bat.c @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_bat.c,v 1.89 2010/03/17 08:07:27 jruoho Exp $ */ +/* $NetBSD: acpi_bat.c,v 1.90 2010/03/17 09:21:50 jruoho Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -75,7 +75,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_bat.c,v 1.89 2010/03/17 08:07:27 jruoho Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_bat.c,v 1.90 2010/03/17 09:21:50 jruoho Exp $"); #include <sys/param.h> #include <sys/condvar.h> @@ -97,17 +97,16 @@ ACPI_MODULE_NAME ("acpi_bat") */ enum { ACPIBAT_PRESENT = 0, - ACPIBAT_TECHNOLOGY = 1, - ACPIBAT_DVOLTAGE = 2, - ACPIBAT_VOLTAGE = 3, - ACPIBAT_DCAPACITY = 4, - ACPIBAT_LFCCAPACITY = 5, - ACPIBAT_CAPACITY = 6, - ACPIBAT_CHARGERATE = 7, - ACPIBAT_DISCHARGERATE = 8, - ACPIBAT_CHARGING = 9, - ACPIBAT_CHARGE_STATE = 10, - ACPIBAT_COUNT = 11 + ACPIBAT_DVOLTAGE = 1, + ACPIBAT_VOLTAGE = 2, + ACPIBAT_DCAPACITY = 3, + ACPIBAT_LFCCAPACITY = 4, + ACPIBAT_CAPACITY = 5, + ACPIBAT_CHARGERATE = 6, + ACPIBAT_DISCHARGERATE = 7, + ACPIBAT_CHARGING = 8, + ACPIBAT_CHARGE_STATE = 9, + ACPIBAT_COUNT = 10 }; /* @@ -178,6 +177,7 @@ static int acpibat_detach(device_t, int); static int acpibat_get_sta(device_t); static ACPI_OBJECT *acpibat_get_object(ACPI_HANDLE, const char *, int); static void acpibat_get_info(device_t); +static void acpibat_print_info(device_t, ACPI_OBJECT *); static void acpibat_get_status(device_t); static void acpibat_update_info(void *); static void acpibat_update_status(void *); @@ -349,14 +349,14 @@ acpibat_get_object(ACPI_HANDLE hdl, const char *pth, int count) /* * acpibat_get_info: * - * Get, and possibly display, the battery info. + * Get the battery info. */ static void acpibat_get_info(device_t dv) { struct acpibat_softc *sc = device_private(dv); ACPI_HANDLE hdl = sc->sc_node->ad_handle; - int capunit, i, j, rateunit, val; + int capunit, i, rateunit, val; ACPI_OBJECT *elm, *obj; ACPI_STATUS rv = AE_OK; @@ -379,26 +379,6 @@ acpibat_get_info(device_t dv) KDASSERT((uint64_t)elm[i].Integer.Value < INT_MAX); } - aprint_verbose_dev(dv, "battery info: "); - - for (i = j = ACPIBAT_BIF_OEM; i > ACPIBAT_BIF_GRANULARITY2; i--) { - - if (elm[i].Type != ACPI_TYPE_STRING) - continue; - - if (elm[i].String.Pointer == NULL) - continue; - - aprint_verbose("%s ", elm[i].String.Pointer); - - j = 0; - } - - if (j != 0) - aprint_verbose("not available"); - - aprint_verbose("\n"); - if ((elm[ACPIBAT_BIF_UNIT].Integer.Value & ACPIBAT_PWRUNIT_MA) != 0) { capunit = ENVSYS_SAMPHOUR; rateunit = ENVSYS_SAMPS; @@ -423,11 +403,6 @@ acpibat_get_info(device_t dv) sc->sc_sensor[ACPIBAT_LFCCAPACITY].value_cur = val * 1000; sc->sc_sensor[ACPIBAT_LFCCAPACITY].state = ACPIBAT_VAL_ISVALID(val); - /* Battery technology. */ - val = elm[ACPIBAT_BIF_TECHNOLOGY].Integer.Value; - sc->sc_sensor[ACPIBAT_TECHNOLOGY].value_cur = val; - sc->sc_sensor[ACPIBAT_TECHNOLOGY].state = ACPIBAT_VAL_ISVALID(val); - /* Design voltage. */ val = elm[ACPIBAT_BIF_DVOLTAGE].Integer.Value; sc->sc_sensor[ACPIBAT_DVOLTAGE].value_cur = val * 1000; @@ -444,6 +419,8 @@ acpibat_get_info(device_t dv) val = sc->sc_sensor[ACPIBAT_LFCCAPACITY].value_cur; sc->sc_sensor[ACPIBAT_CAPACITY].value_max = val; + acpibat_print_info(dv, elm); + out: if (obj != NULL) ACPI_FREE(obj); @@ -454,9 +431,41 @@ out: } /* + * acpibat_print_info: + * + * Display the battery info. + */ +static void +acpibat_print_info(device_t dv, ACPI_OBJECT *elm) +{ + const char *tech; + int i; + + for (i = ACPIBAT_BIF_OEM; i > ACPIBAT_BIF_GRANULARITY2; i--) { + + if (elm[i].Type != ACPI_TYPE_STRING) + return; + + if (elm[i].String.Pointer == NULL) + return; + } + + tech = (elm[ACPIBAT_BIF_TECHNOLOGY].Integer.Value != 0) ? + "secondary (rechargeable)" : "primary (non-rechargeable)"; + + aprint_normal_dev(dv, "%s %s %s battery\n", tech, + elm[ACPIBAT_BIF_OEM].String.Pointer, + elm[ACPIBAT_BIF_TYPE].String.Pointer); + + aprint_verbose_dev(dv, "serial number %s, model number %s\n", + elm[ACPIBAT_BIF_SERIAL].String.Pointer, + elm[ACPIBAT_BIF_MODEL].String.Pointer); +} + +/* * acpibat_get_status: * - * Get, and possibly display, the current battery line status. + * Get the current battery status. */ static void acpibat_get_status(device_t dv) @@ -565,7 +574,7 @@ acpibat_update_info(void *arg) if (rv > 0) acpibat_get_info(dv); else { - i = (rv < 0) ? 0 : ACPIBAT_TECHNOLOGY; + i = (rv < 0) ? 0 : ACPIBAT_DVOLTAGE; while (i < ACPIBAT_COUNT) { sc->sc_sensor[i].state = ENVSYS_SINVALID; @@ -596,7 +605,7 @@ acpibat_update_status(void *arg) acpibat_get_status(dv); } else { - i = (rv < 0) ? 0 : ACPIBAT_TECHNOLOGY; + i = (rv < 0) ? 0 : ACPIBAT_DVOLTAGE; while (i < ACPIBAT_COUNT) { sc->sc_sensor[i].state = ENVSYS_SINVALID; @@ -657,7 +666,6 @@ acpibat_init_envsys(device_t dv) INITDATA(ACPIBAT_PRESENT, ENVSYS_INDICATOR, "present"); INITDATA(ACPIBAT_DCAPACITY, ENVSYS_SWATTHOUR, "design cap"); INITDATA(ACPIBAT_LFCCAPACITY, ENVSYS_SWATTHOUR, "last full cap"); - INITDATA(ACPIBAT_TECHNOLOGY, ENVSYS_INTEGER, "technology"); INITDATA(ACPIBAT_DVOLTAGE, ENVSYS_SVOLTS_DC, "design voltage"); INITDATA(ACPIBAT_VOLTAGE, ENVSYS_SVOLTS_DC, "voltage"); INITDATA(ACPIBAT_CHARGERATE, ENVSYS_SWATTS, "charge rate"); @@ -677,7 +685,6 @@ acpibat_init_envsys(device_t dv) sc->sc_sensor[ACPIBAT_DISCHARGERATE].flags = ENVSYS_FMONNOTSUPP; sc->sc_sensor[ACPIBAT_DCAPACITY].flags = ENVSYS_FMONNOTSUPP; sc->sc_sensor[ACPIBAT_LFCCAPACITY].flags = ENVSYS_FMONNOTSUPP; - sc->sc_sensor[ACPIBAT_TECHNOLOGY].flags = ENVSYS_FMONNOTSUPP; sc->sc_sensor[ACPIBAT_DVOLTAGE].flags = ENVSYS_FMONNOTSUPP; sc->sc_sme = sysmon_envsys_create(); |
