Module Name: src Committed By: jruoho Date: Wed Mar 17 09:21:50 UTC 2010
Modified Files: src/sys/dev/acpi: acpi_bat.c Log Message: 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). To generate a diff of this commit: cvs rdiff -u -r1.89 -r1.90 src/sys/dev/acpi/acpi_bat.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/acpi/acpi_bat.c diff -u src/sys/dev/acpi/acpi_bat.c:1.89 src/sys/dev/acpi/acpi_bat.c:1.90 --- src/sys/dev/acpi/acpi_bat.c:1.89 Wed Mar 17 08:07:27 2010 +++ src/sys/dev/acpi/acpi_bat.c Wed Mar 17 09:21:50 2010 @@ -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 @@ */ 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_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_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 @@ 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 @@ 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 @@ 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 @@ } /* + * 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 @@ 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_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 @@ 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 @@ 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();