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)
{