summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2005-12-24 19:41:46 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2005-12-24 19:41:46 +0000
commit3bbe65025a12ce4dd014a64e8ae9a6ca9520c937 (patch)
treec22d3aeb7674f65114c659a1e09c736350ef606e /sys/dev
parentc26d0c31cac7ebfe86a513c82975c5123decf068 (diff)
signed temperature...
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/i2c/adm1021.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/sys/dev/i2c/adm1021.c b/sys/dev/i2c/adm1021.c
index bfb420fcfa4..3d4924a55ed 100644
--- a/sys/dev/i2c/adm1021.c
+++ b/sys/dev/i2c/adm1021.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: adm1021.c,v 1.2 2005/12/23 01:15:06 deraadt Exp $ */
+/* $OpenBSD: adm1021.c,v 1.3 2005/12/24 19:41:45 deraadt Exp $ */
/*
* Copyright (c) 2005 Theo de Raadt
@@ -27,6 +27,8 @@
#define ADM1021_INT_TEMP 0x00
#define ADM1021_EXT_TEMP 0x01
#define ADM1021_STATUS 0x02
+#define ADM1021_CONFIG_READ 0x03
+#define ADM1021_CONFIG_WRITE 0x09
#define ADM1021_COMPANY 0xfe /* contains 0x41 */
#define ADM1021_STEPPING 0xff /* contains 0x3? */
@@ -79,11 +81,30 @@ admtemp_attach(struct device *parent, struct device *self, void *aux)
{
struct admtemp_softc *sc = (struct admtemp_softc *)self;
struct i2c_attach_args *ia = aux;
+// u_int8_t cmd, data;
int i;
sc->sc_tag = ia->ia_tag;
sc->sc_addr = ia->ia_addr;
+// iic_acquire_bus(sc->sc_tag, 0);
+// cmd = ADM1021_CONFIG_READ;
+// if (iic_exec(sc->sc_tag, I2C_OP_READ_WITH_STOP,
+// sc->sc_addr, &cmd, sizeof cmd, &data, sizeof data, 0)) {
+// iic_release_bus(sc->sc_tag, 0);
+// printf(": cannot get control register\n");
+// return;
+// }
+// data &= ~0x40;
+// cmd = ADM1021_CONFIG_WRITE;
+// if (iic_exec(sc->sc_tag, I2C_OP_WRITE_WITH_STOP,
+// sc->sc_addr, &cmd, sizeof cmd, &data, sizeof data, 0)) {
+// iic_release_bus(sc->sc_tag, 0);
+// printf(": cannot set control register\n");
+// return;
+// }
+// iic_release_bus(sc->sc_tag, 0);
+
/* Initialize sensor data. */
for (i = 0; i < ADMTEMP_NUM_SENSORS; i++)
strlcpy(sc->sc_sensor[i].device, sc->sc_dev.dv_xname,
@@ -112,19 +133,20 @@ void
admtemp_refresh(void *arg)
{
struct admtemp_softc *sc = arg;
- u_int8_t cmd, data;
+ u_int8_t cmd;
+ int8_t sdata;
iic_acquire_bus(sc->sc_tag, 0);
cmd = ADM1021_INT_TEMP;
if (iic_exec(sc->sc_tag, I2C_OP_READ_WITH_STOP,
- sc->sc_addr, &cmd, sizeof cmd, &data, sizeof data, 0) == 0)
- sc->sc_sensor[ADMTEMP_INT].value = 273150000 + 1000000 * data;
+ sc->sc_addr, &cmd, sizeof cmd, &sdata, sizeof sdata, I2C_F_POLL) == 0)
+ sc->sc_sensor[ADMTEMP_INT].value = 273150000 + 1000000 * sdata;
cmd = ADM1021_EXT_TEMP;
if (iic_exec(sc->sc_tag, I2C_OP_READ_WITH_STOP,
- sc->sc_addr, &cmd, sizeof cmd, &data, sizeof data, 0) == 0)
- sc->sc_sensor[ADMTEMP_EXT].value = 273150000 + 1000000 * data;
+ sc->sc_addr, &cmd, sizeof cmd, &sdata, sizeof sdata, I2C_F_POLL) == 0)
+ sc->sc_sensor[ADMTEMP_EXT].value = 273150000 + 1000000 * sdata;
iic_release_bus(sc->sc_tag, 0);
}