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();

Reply via email to