Module Name:    src
Committed By:   macallan
Date:           Tue Sep 14 02:45:25 UTC 2010

Modified Files:
        src/sys/arch/macppc/dev: smartbat.c

Log Message:
only mark battery status sensors valid if the battery is actually present


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/macppc/dev/smartbat.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/arch/macppc/dev/smartbat.c
diff -u src/sys/arch/macppc/dev/smartbat.c:1.3 src/sys/arch/macppc/dev/smartbat.c:1.4
--- src/sys/arch/macppc/dev/smartbat.c:1.3	Tue Aug 12 17:16:16 2008
+++ src/sys/arch/macppc/dev/smartbat.c	Tue Sep 14 02:45:25 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: smartbat.c,v 1.3 2008/08/12 17:16:16 macallan Exp $ */
+/*	$NetBSD: smartbat.c,v 1.4 2010/09/14 02:45:25 macallan Exp $ */
 
 /*-
  * Copyright (c) 2007 Michael Lorenz
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smartbat.c,v 1.3 2008/08/12 17:16:16 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smartbat.c,v 1.4 2010/09/14 02:45:25 macallan Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -174,43 +174,60 @@
 smartbat_refresh(struct sysmon_envsys *sme, envsys_data_t *edata)
 {
 	struct smartbat_softc *sc = sme->sme_cookie;
-	int which = edata->sensor;
+	int which = edata->sensor, present;
 
 	smartbat_update(sc, 0);
+	present = (sc->sc_flags & PMU_PWR_BATT_PRESENT) != 0;
 
-	switch (which) {
-	case BAT_AC_PRESENT:
-		edata->value_cur = (sc->sc_flags & PMU_PWR_AC_PRESENT);
-		break;
-	case BAT_PRESENT:
-		edata->value_cur = (sc->sc_flags & PMU_PWR_BATT_PRESENT);
-		break;
-	case BAT_VOLTAGE:
-		edata->value_cur = sc->sc_voltage * 1000;
-		break;
-	case BAT_CURRENT:
-		edata->value_cur = sc->sc_draw * 1000;
-		break;
-	case BAT_MAX_CHARGE:
-		edata->value_cur = sc->sc_max_charge * 1000;
-		break;
-	case BAT_CHARGE:
-		edata->value_cur = sc->sc_charge * 1000;
-		break;
-	case BAT_CHARGING:
-		if ((sc->sc_flags & PMU_PWR_BATT_CHARGING) &&
-		    (sc->sc_flags & PMU_PWR_AC_PRESENT))
-			edata->value_cur = 1;
-		else
+	if (present) {
+		switch (which) {
+		case BAT_AC_PRESENT:
+			edata->value_cur = (sc->sc_flags & PMU_PWR_AC_PRESENT);
+			break;
+		case BAT_PRESENT:
+			edata->value_cur = present;
+			break;
+		case BAT_VOLTAGE:
+			edata->value_cur = sc->sc_voltage * 1000;
+			break;
+		case BAT_CURRENT:
+			edata->value_cur = sc->sc_draw * 1000;
+			break;
+		case BAT_MAX_CHARGE:
+			edata->value_cur = sc->sc_max_charge * 1000;
+			break;
+		case BAT_CHARGE:
+			edata->value_cur = sc->sc_charge * 1000;
+			break;
+		case BAT_CHARGING:
+			if ((sc->sc_flags & PMU_PWR_BATT_CHARGING) &&
+			    (sc->sc_flags & PMU_PWR_AC_PRESENT))
+				edata->value_cur = 1;
+			else
+				edata->value_cur = 0;
+
+			break;
+		case BAT_FULL:
+			edata->value_cur = (sc->sc_flags & PMU_PWR_BATT_FULL);
+			break;
+		}
+		edata->state = ENVSYS_SVALID;
+	} else {
+		/* battery isn't there */
+		switch (which) {
+		case BAT_AC_PRESENT:
+			edata->value_cur = (sc->sc_flags & PMU_PWR_AC_PRESENT);
+			edata->state = ENVSYS_SVALID;
+			break;
+		case BAT_PRESENT:
+			edata->value_cur = present;
+			edata->state = ENVSYS_SVALID;
+			break;
+		default:
+			edata->state = ENVSYS_SINVALID;
 			edata->value_cur = 0;
-
-		break;
-	case BAT_FULL:
-		edata->value_cur = (sc->sc_flags & PMU_PWR_BATT_FULL);
-		break;
+		}
 	}
-
-	edata->state = ENVSYS_SVALID;
 }
 
 /*

Reply via email to