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