diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2006-03-12 12:09:17 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2006-03-12 12:09:17 +0000 |
commit | f76049b087c6e2014305b40c3edd56314daa7101 (patch) | |
tree | 13e23aa250f8e7cc45fedf2f58e83068d759f7af /sys/dev/i2c/w83l784r.c | |
parent | cdd886058ee32166e7ab55b58d65f8127135fc51 (diff) |
Properly scale voltage on w83l784r.
Origional patch from Constantine A. Murenin.
Diffstat (limited to 'sys/dev/i2c/w83l784r.c')
-rw-r--r-- | sys/dev/i2c/w83l784r.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/sys/dev/i2c/w83l784r.c b/sys/dev/i2c/w83l784r.c index c9086ce3b49..dd257a475a6 100644 --- a/sys/dev/i2c/w83l784r.c +++ b/sys/dev/i2c/w83l784r.c @@ -1,4 +1,4 @@ -/* $OpenBSD: w83l784r.c,v 1.4 2006/02/17 13:11:54 kettenis Exp $ */ +/* $OpenBSD: w83l784r.c,v 1.5 2006/03/12 12:09:16 kettenis Exp $ */ /* * Copyright (c) 2006 Mark Kettenis @@ -66,6 +66,7 @@ struct wbenv_softc { i2c_tag_t sc_tag; i2c_addr_t sc_addr[3]; + u_int8_t sc_chip_id; struct sensor sc_sensors[WBENV_MAX_SENSORS]; struct wbenv_sensor *sc_wbenv_sensors; @@ -166,7 +167,9 @@ wbenv_attach(struct device *parent, struct device *self, void *aux) iic_release_bus(sc->sc_tag, 0); - switch (data) { + sc->sc_chip_id = data; + + switch (sc->sc_chip_id) { case WBENV_CHIPID_W83L784R: printf(": W83L784R\n"); wbenv_setup_sensors(sc, w83l784r_sensors); @@ -180,7 +183,7 @@ wbenv_attach(struct device *parent, struct device *self, void *aux) wbenv_setup_sensors(sc, w83l785ts_l_sensors); goto start;; default: - printf(": unknownd Winbond chip (ID 0x%x)\n", data); + printf(": unknownd Winbond chip (ID 0x%x)\n", sc->sc_chip_id); return; } @@ -229,7 +232,7 @@ wbenv_setup_sensors(struct wbenv_softc *sc, struct wbenv_sensor *sensors) sizeof(sc->sc_sensors[i].device)); sc->sc_sensors[i].type = sensors[i].type; strlcpy(sc->sc_sensors[i].desc, sensors[i].desc, - sizeof(sc->sc_sensors[i].desc)); + sizeof(sc->sc_sensors[i].desc)); sc->sc_numsensors++; } sc->sc_wbenv_sensors = sensors; @@ -253,11 +256,14 @@ void wbenv_refresh_volts(struct wbenv_softc *sc, int n) { struct sensor *sensor = &sc->sc_sensors[n]; - int data; + int data, reg = sc->sc_wbenv_sensors[n].reg; - data = wbenv_readreg(sc, sc->sc_wbenv_sensors[n].reg); + data = wbenv_readreg(sc, reg); sensor->value = (data << 4); - sensor->value *= 1000; + if (reg == W83L784R_VCC && sc->sc_chip_id == WBENV_CHIPID_W83L784R) + sensor->value *= 1000 * (50 + 34) / 50; + else + sensor->value *= 1000; } void |