Module Name:    src
Committed By:   khorben
Date:           Thu May 16 15:51:29 UTC 2013

Modified Files:
        src/sys/dev/i2c [khorben-n900]: lp5523.c

Log Message:
Added a refresh callback for the temperature sensor.


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/dev/i2c/lp5523.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/i2c/lp5523.c
diff -u src/sys/dev/i2c/lp5523.c:1.1.2.1 src/sys/dev/i2c/lp5523.c:1.1.2.2
--- src/sys/dev/i2c/lp5523.c:1.1.2.1	Thu May 16 15:36:50 2013
+++ src/sys/dev/i2c/lp5523.c	Thu May 16 15:51:29 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: lp5523.c,v 1.1.2.1 2013/05/16 15:36:50 khorben Exp $ */
+/* $NetBSD: lp5523.c,v 1.1.2.2 2013/05/16 15:51:29 khorben Exp $ */
 
 /*
  * Texas Instruments LP5523 Programmable 9-Output LED Driver
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lp5523.c,v 1.1.2.1 2013/05/16 15:36:50 khorben Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lp5523.c,v 1.1.2.2 2013/05/16 15:51:29 khorben Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -83,6 +83,9 @@ static int	lp5523_reset(struct lp5523_so
 
 static int	lp5523_sysctl(SYSCTLFN_ARGS);
 
+static void	lp5523_refresh_temperature(struct sysmon_envsys *,
+		envsys_data_t *);
+
 static int	lp5523_read_1(struct lp5523_softc *, uint8_t, uint8_t *);
 static int	lp5523_write_1(struct lp5523_softc *, uint8_t, uint8_t);
 
@@ -125,13 +128,12 @@ lp5523_attach_envsys(struct lp5523_softc
 {
 	const int flags = ENVSYS_FMONNOTSUPP | ENVSYS_FHAS_ENTROPY
 		| ENVSYS_FVALID_MIN | ENVSYS_FVALID_MAX;
-	int8_t s8;
 
 	sc->sc_sme = sysmon_envsys_create();
 
 	sc->sc_sme->sme_cookie = sc;
 	sc->sc_sme->sme_name = device_xname(sc->sc_dev);
-	sc->sc_sme->sme_flags = SME_DISABLE_REFRESH;
+	sc->sc_sme->sme_refresh = lp5523_refresh_temperature;
 
 	sc->sc_temp_sensor.flags = flags;
 	sc->sc_temp_sensor.units = ENVSYS_STEMP;
@@ -152,13 +154,7 @@ lp5523_attach_envsys(struct lp5523_softc
 		return;
 	}
 
-	iic_acquire_bus(sc->sc_i2c, 0);
-	lp5523_read_1(sc, LP5523_REG_TEMP_READ, &s8);
-	iic_release_bus(sc->sc_i2c, 0);
-	if (s8 >= -41 && s8 <= 89) {
-		sc->sc_temp_sensor.state = ENVSYS_SVALID;
-		sc->sc_temp_sensor.value_cur = LP5523_DEGC2UK(s8);
-	}
+	lp5523_refresh_temperature(sc->sc_sme, &sc->sc_temp_sensor);
 }
 
 static void
@@ -238,6 +234,23 @@ lp5523_sysctl(SYSCTLFN_ARGS)
 	return error;
 }
 
+static void
+lp5523_refresh_temperature(struct sysmon_envsys *sme, envsys_data_t *edata)
+{
+	struct lp5523_softc *sc = sme->sme_cookie;
+	int8_t s8;
+
+	iic_acquire_bus(sc->sc_i2c, 0);
+	lp5523_read_1(sc, LP5523_REG_TEMP_READ, &s8);
+	iic_release_bus(sc->sc_i2c, 0);
+	if (s8 >= -41 && s8 <= 89) {
+		sc->sc_temp_sensor.state = ENVSYS_SVALID;
+		sc->sc_temp_sensor.value_cur = LP5523_DEGC2UK(s8);
+	} else {
+		sc->sc_temp_sensor.state = ENVSYS_SINVALID;
+	}
+}
+
 static int
 lp5523_read_1(struct lp5523_softc *sc, uint8_t reg, uint8_t *val)
 {

Reply via email to