temperature and such, sensors for ABIT motherboards.
been using this patch for months now,
also tested with couple of other machines.

patch is also available via http
sefirosu.org/uguru.diff.gz
Index: share/man/man4/Makefile
===================================================================
RCS file: /cvs/src/share/man/man4/Makefile,v
retrieving revision 1.504
diff -u -p -r1.504 Makefile
--- share/man/man4/Makefile     1 Mar 2010 23:35:56 -0000       1.504
+++ share/man/man4/Makefile     26 Mar 2010 09:10:53 -0000
@@ -54,7 +54,7 @@ MAN=  aac.4 ac97.4 acphy.4 \
        tlphy.4 thmc.4 tqphy.4 trm.4 trunk.4 tsl.4 tty.4 tun.4 twe.4 txp.4 \
        txphy.4 uaudio.4 uark.4 uath.4 uberry.4 ubsa.4 ubsec.4 ubt.4 \
        ucom.4 uchcom.4 ucycom.4 udav.4 udcf.4 udfu.4 udl.4 udp.4 udsbr.4 \
-       ueagle.4 uftdi.4 ugen.4 uhci.4 uhid.4 uhidev.4 uhts.4 \
+       ueagle.4 uftdi.4 ugen.4 uguru.4 uhci.4 uhid.4 uhidev.4 uhts.4 \
        uipaq.4 uk.4 ukbd.4 \
        ukphy.4 ulpt.4 umass.4 umbg.4 umct.4 umidi.4 umodem.4 ums.4 umsm.4 \
        unix.4 uow.4 upgt.4 upl.4 uplcom.4 ural.4 urio.4 url.4 urlphy.4 \
Index: share/man/man4/uguru.4
===================================================================
RCS file: share/man/man4/uguru.4
diff -N share/man/man4/uguru.4
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ share/man/man4/uguru.4      26 Mar 2010 09:10:53 -0000
@@ -0,0 +1,51 @@
+.\"    $OpenBSD$
+.\"
+.\" Copyright (c) 2010 Mikko Tolmunen <[email protected]>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.Dd $Mdocdate$
+.Dt UGURU 4
+.Os
+.Sh NAME
+.Nm uguru
+.Nd temperature, voltage and fan sensors
+.Sh SYNOPSIS
+.Cd "uguru0 at isa? port 0xe0"
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for the microcontroller
+found in various
+.Tn ABIT
+motherboards which serves as
+the gateway chip between system management software
+and hardware. Sensor values are made available through the
+.Xr sysctl 8
+interface.
+.Sh SEE ALSO
+.Xr intro 4 ,
+.Xr isa 4 ,
+.Xr sensorsd 8 ,
+.Xr sysctl 8
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Ox 4.8
+.Sh AUTHORS
+The
+.Nm
+driver was written by
+.An Mikko Tolmunen Aq [email protected] .
+.Sh BUGS
+Interrupt support is unimplemented.
Index: sys/arch/amd64/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/amd64/conf/GENERIC,v
retrieving revision 1.287
diff -u -p -r1.287 GENERIC
--- sys/arch/amd64/conf/GENERIC 3 Mar 2010 20:57:28 -0000       1.287
+++ sys/arch/amd64/conf/GENERIC 26 Mar 2010 09:10:56 -0000
@@ -97,6 +97,8 @@ wbsio*        at isa? port 0x2e       # Winbond LPC S
 wbsio* at isa? port 0x4e
 lm*    at wbsio?
 
+uguru0 at isa? port 0xe0               # ABIT uGuru
+
 aps0   at isa? port 0x1600             # ThinkPad Active Protection System
 
 piixpm*        at pci?                 # Intel PIIX PM
Index: sys/arch/i386/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/i386/conf/GENERIC,v
retrieving revision 1.680
diff -u -p -r1.680 GENERIC
--- sys/arch/i386/conf/GENERIC  3 Mar 2010 20:57:28 -0000       1.680
+++ sys/arch/i386/conf/GENERIC  26 Mar 2010 09:11:00 -0000
@@ -149,6 +149,7 @@ wbsio*      at isa? port 0x2e               # Winbond LPC 
 wbsio* at isa? port 0x4e
 lm*    at wbsio?
 fins0  at isa? port 0x4e               # Fintek F71805 Super I/O
+uguru0 at isa? port 0xe0               # ABIT uGuru
 
 aps0   at isa? port 0x1600             # ThinkPad Active Protection System
 
Index: sys/dev/isa/files.isa
===================================================================
RCS file: /cvs/src/sys/dev/isa/files.isa,v
retrieving revision 1.105
diff -u -p -r1.105 files.isa
--- sys/dev/isa/files.isa       23 Jan 2009 20:32:22 -0000      1.105
+++ sys/dev/isa/files.isa       26 Mar 2010 09:11:06 -0000
@@ -373,6 +373,11 @@ device     viasio
 attach viasio at isa
 file   dev/isa/viasio.c                viasio
 
+# ABIT uGuru
+device uguru
+attach uguru at isa
+file   dev/isa/uguru.c                 uguru
+
 # ThinkPad Active Protection System accelerometer
 device aps
 attach aps at isa
Index: sys/dev/isa/uguru.c
===================================================================
RCS file: sys/dev/isa/uguru.c
diff -N sys/dev/isa/uguru.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ sys/dev/isa/uguru.c 26 Mar 2010 09:11:06 -0000
@@ -0,0 +1,461 @@
+/*     $OpenBSD$       */
+
+/*
+ * Copyright (c) 2010 Mikko Tolmunen <[email protected]>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/device.h>
+#include <sys/sensors.h>
+
+#include <machine/bus.h>
+
+#include <dev/isa/isareg.h>
+#include <dev/isa/isavar.h>
+#include <dev/isa/uguruvar.h>
+
+#ifdef UGURU_DEBUG
+int    uguru_dbg = 0;
+#define DPRINTF(lvl, fmt...)   \
+       if (uguru_dbg >= lvl)   \
+               printf(fmt);
+#else
+#define DPRINTF(lvl, fmt...)
+#endif
+
+#define UGURU_READ(sc, reg)    \
+    bus_space_read_1((sc)->sc_iot, (sc)->sc_ioh, (reg))
+#define UGURU_WRITE(sc, reg, val) \
+    bus_space_write_1((sc)->sc_iot, (sc)->sc_ioh, (reg), (val))
+
+int             uguru_match(struct device *, void *, void *);
+void            uguru_attach(struct device *, struct device *, void *);
+void            uguru_refresh(void *);
+int             uguru_read_sensor(struct uguru_softc *, int);
+int             uguru_ac5_read_sensor(struct uguru_softc *, int);
+int             uguru_ac5_read(struct uguru_softc *, uint16_t, void *, int);
+int             uguru_write_multi(struct uguru_softc *, uint8_t, void *, int);
+int             uguru_read_multi(struct uguru_softc *, void *, int);
+
+struct cfdriver uguru_cd = {
+       NULL, "uguru", DV_DULL
+};
+
+struct cfattach uguru_ca = {
+       sizeof(struct uguru_softc), uguru_match, uguru_attach
+};
+
+int
+uguru_match(struct device *parent, void *match, void *aux)
+{
+       struct isa_attach_args *ia = aux;
+       bus_space_tag_t iot;
+       bus_space_handle_t ioh;
+       int val;
+
+       iot = ia->ia_iot;
+       if (bus_space_map(iot, ia->ipa_io[0].base, UGURU_IOSIZE, 0, &ioh)) {
+               DPRINTF(0, ": can't map i/o space\n");
+               return 0;
+       }
+
+       bus_space_write_1(iot, ioh, UGURU_INDEX, UGURU_DUMMY);
+       DELAY(1000);
+       val = bus_space_read_1(iot, ioh, UGURU_DATA);
+       bus_space_unmap(iot, ioh, UGURU_IOSIZE);
+
+       /* acknowledgement after write */
+       if (val == 0xac)
+               goto match;
+
+       /*
+        * XXX: assumption is made that the value is still the
+        * power up default on AC2005.
+        */
+       if (val == 0x55)
+               goto match;
+
+       return 0;
+
+match: ia->ipa_nio = 1;
+       ia->ipa_io[0].length = UGURU_IOSIZE;
+       ia->ipa_nmem = 0;
+       ia->ipa_nirq = 0;
+       ia->ipa_ndrq = 0;
+       return 1;
+}
+
+void
+uguru_attach(struct device *parent, struct device *self, void *aux)
+{
+       struct uguru_softc *sc = (void *)self;
+       struct isa_attach_args *ia = aux;
+       struct uguru_sensor *sensors;
+       uint8_t data[9];
+       uint16_t vendid, devid, sysid;
+       int i;
+
+       sc->sc_iot = ia->ia_iot;
+       if (bus_space_map(sc->sc_iot, ia->ipa_io[0].base,
+           UGURU_IOSIZE, 0, &sc->sc_ioh)) {
+               printf(": can't map i/o space\n");
+               return;
+       }
+
+       UGURU_WRITE(sc, UGURU_INDEX, UGURU_PRODID);
+       if (!uguru_read_multi(sc, &data, sizeof(data))) {
+               sc->read = uguru_read_sensor;
+               goto done;
+       }
+
+       /* AC2005 product ID */
+       if (!uguru_ac5_read(sc, 0x0904, &data, sizeof(data))) {
+               sc->read = uguru_ac5_read_sensor;
+               goto done;
+       }
+
+       printf("\n");
+       return;
+
+done:
+       DPRINTF(5, ": %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x",
+           data[0], data[1], data[2], data[3], data[4],
+           data[5], data[6], data[7], data[8]);
+
+       vendid = data[0] << 8 | data[1];
+       devid = data[2] << 8 | data[3];
+       sysid = data[3] << 8 | data[7];
+
+       if (vendid != UGURU_VENDID_ABIT ||
+           (devid != UGURU_DEVID1 &&
+            devid != UGURU_DEVID2)) {
+               printf(": attach failed\n");
+               return;
+       }
+       printf(": AC%x", devid);
+
+       switch(sysid) {
+       case ABIT_SYSID_KV01:
+       case ABIT_SYSID_AI01:
+       case ABIT_SYSID_AN01:
+               printf(" KV1");
+               sensors = abitkv_sensors;
+               break;
+       case ABIT_SYSID_AA01:
+       case ABIT_SYSID_AG01:
+               printf(" AA1");
+               sensors = abitaa_sensors;
+               break;
+       case ABIT_SYSID_AV01:
+       case ABIT_SYSID_KVP1:
+               printf(" AV1");
+               sensors = abitav_sensors;
+               break;
+       case ABIT_SYSID_AS01:
+               printf(" AS1");
+               sensors = abitas_sensors;
+               break;
+       case ABIT_SYSID_AX01:
+               printf(" AX1");
+               sensors = abitax_sensors;
+               break;
+       case ABIT_SYSID_M401:
+               printf(" M41");
+               sensors = abitm4_sensors;
+               break;
+       case ABIT_SYSID_AN02:
+               printf(" AN1");
+               sensors = abitan_sensors;
+               break;
+       case ABIT_SYSID_AU01:
+       case ABIT_SYSID_AL01:
+       case ABIT_SYSID_BL01:
+               printf(" AL1");
+               sensors = abital_sensors;
+               break;
+       case ABIT_SYSID_AW01:
+       case ABIT_SYSID_AW02:
+               printf(" AW1");
+               sensors = abitaw_sensors;
+               break;
+       case ABIT_SYSID_NI01:
+               printf(" NI1");
+               sensors = abitni_sensors;
+               break;
+       case ABIT_SYSID_AT01:
+               printf(" AT1");
+               sensors = abitat_sensors;
+               break;
+       case ABIT_SYSID_AN03:
+               printf(" AN2");
+               sensors = abitan2_sensors;
+               break;
+       case ABIT_SYSID_AB01:
+               printf(" AB1");
+               sensors = abitab_sensors;
+               break;
+       case ABIT_SYSID_AN04:
+               printf(" AN3");
+               sensors = abitan3_sensors;
+               break;
+       case ABIT_SYSID_AW03:
+               printf(" AW2");
+               sensors = abitaw2_sensors;
+               break;
+       case ABIT_SYSID_AT02:
+               printf(" AT2");
+               sensors = abitat2_sensors;
+               break;
+       case ABIT_SYSID_AB02:
+       case ABIT_SYSID_IP01:
+       case ABIT_SYSID_IX01:
+       case ABIT_SYSID_IX02:
+               printf(" AB2");
+               sensors = abitab2_sensors;
+               break;
+       case ABIT_SYSID_IN01:
+               printf(" IN1");
+               sensors = abitin_sensors;
+               break;
+       default:
+               printf(" unknown system (ID 0x%.4x)\n", sysid);
+               return;
+       }
+       printf("\n");
+
+       strlcpy(sc->sc_sensordev.xname,
+           sc->sc_dev.dv_xname,
+           sizeof(sc->sc_sensordev.xname));
+
+       for (i = 0; sensors[i].desc != NULL; i++) {
+               strlcpy(sc->sc_sensors[i].desc,
+                   sensors[i].desc, sizeof(sc->sc_sensors[i].desc));
+               sc->sc_sensors[i].type = sensors[i].type;
+               sensor_attach(&sc->sc_sensordev, &sc->sc_sensors[i]);
+               sc->sc_numsensors++;
+       }
+       sc->uguru_sensors = sensors;
+
+       if (sensor_task_register(sc, uguru_refresh, UGURU_INTERVAL) == NULL) {
+               printf("%s: unable to register update task\n",
+                   sc->sc_sensordev.xname);
+               return;
+       }
+       sensordev_install(&sc->sc_sensordev);
+}
+
+void
+uguru_refresh(void *arg)
+{
+       struct uguru_softc *sc = (struct uguru_softc *)arg;
+       int i;
+
+       for (i = 0; i < sc->sc_numsensors; i++)
+               sc->uguru_sensors[i].refresh(sc, i);
+}
+
+void
+uguru_refresh_temp(struct uguru_softc *sc, int n)
+{
+       struct ksensor *sensor = &sc->sc_sensors[n];
+       int status = SENSOR_S_OK;
+       int ret;
+
+       ret = sc->read(sc, n);
+       if (sc->cs.reading == 0x00) {
+               sensor->flags |= SENSOR_FINVALID;
+               sensor->value = 0;
+               return;
+       }
+       sensor->flags &= ~SENSOR_FINVALID;
+       sensor->value = sc->cs.reading * 1000000 + 273150000;
+
+       if (ret)
+               status = SENSOR_S_UNSPEC;
+       else {
+               if (sc->cs.reading >= sc->cs.lower)
+                       status = SENSOR_S_WARN;
+               if (sc->cs.reading >= sc->cs.upper)
+                       status = SENSOR_S_CRIT;
+       }
+       sensor->status = status;
+}
+
+void
+uguru_refresh_volt(struct uguru_softc *sc, int n)
+{
+       int status = SENSOR_S_OK;
+
+       if (sc->read(sc, n))
+               status = SENSOR_S_UNSPEC;
+       else
+               if (sc->cs.reading <= sc->cs.lower ||
+                   sc->cs.reading >= sc->cs.upper)
+                       status = SENSOR_S_CRIT;
+
+       sc->sc_sensors[n].value =
+           sc->cs.reading * sc->uguru_sensors[n].rfact;
+       sc->sc_sensors[n].status = status;
+}
+
+void
+uguru_refresh_fan(struct uguru_softc *sc, int n)
+{
+       struct ksensor *sensor = &sc->sc_sensors[n];
+       int ret;
+
+       ret = sc->read(sc, n);
+       if (sc->cs.reading == 0x00) {
+               sensor->flags |= SENSOR_FINVALID;
+               sensor->value = 0;
+               return;
+       }
+       sensor->flags &= ~SENSOR_FINVALID;
+       sensor->value = sc->cs.reading * 60;
+
+       if (ret)
+               sensor->status = SENSOR_S_UNSPEC;
+       else
+               if (sc->cs.reading <= sc->cs.lower)
+                       sensor->status = SENSOR_S_CRIT;
+               else
+                       sensor->status = SENSOR_S_OK;
+}
+
+int
+uguru_read_sensor(struct uguru_softc *sc, int n)
+{
+       struct ksensor *sensor = &sc->sc_sensors[n];
+       uint8_t reg = sc->uguru_sensors[n].reg;
+       uint8_t idx, data[3];
+       uint8_t val = 0x00;
+       int count, ret = 0;
+
+       if (sensor->type == SENSOR_FANRPM)
+               idx = UGURU_FAN_DATA;
+       else
+               idx = UGURU_ITM_DATA;
+
+       /* sensor value */
+       if (uguru_write_multi(sc, idx, &reg, sizeof(reg)) ||
+           uguru_read_multi(sc, &val, sizeof(val)))
+               ++ret;
+
+       /* sensor status */
+       bzero(&data, sizeof(data));
+       count = sensor->type == SENSOR_FANRPM ? 2 : 3;
+
+       if (uguru_write_multi(sc, idx + 1, &reg, sizeof(reg)) ||
+           uguru_read_multi(sc, &data, count))
+               ++ret;
+
+       /* fill in current sensor structure */
+       sc->cs.reading = val;
+/*     sc->cs.flags = data[0]; */
+       sc->cs.lower = data[1];
+       sc->cs.upper = data[2];
+
+       DPRINTF(50, "0x%.2x: 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x\n",
+           idx, reg, val, data[0], data[1], data[2]);
+
+       return (ret);
+}
+
+int
+uguru_ac5_read_sensor(struct uguru_softc *sc, int n)
+{
+       uint16_t reg;
+       uint8_t val = 0x00;
+       int ret = 1;
+
+       reg = sc->uguru_sensors[n].reg | 0x0880;
+       if (uguru_ac5_read(sc, reg, &val, sizeof(val)))
+               ++ret;
+
+       sc->cs.reading = val;
+       return (ret);
+}
+
+int
+uguru_ac5_read(struct uguru_softc *sc, uint16_t reg, void *data, int count)
+{
+       uint8_t buf[3];
+
+       buf[0] = reg >> 8;
+       buf[1] = reg & 0xff;
+       buf[2] = count;
+
+       if (!uguru_write_multi(sc, 0x1a, &buf, sizeof(buf)) &&
+           !uguru_read_multi(sc, data, count))
+               return 0;
+
+       DPRINTF(0, "uguru_ac5_read: timeout 0x%.2x 0x%.2x 0x%.2x\n",
+           buf[0], buf[1], buf[2]);
+
+       return 1;
+}
+
+int
+uguru_write_multi(struct uguru_softc *sc, uint8_t idx, void *data, int count)
+{
+       uint8_t *inbuf = data;
+       int i, ntries;
+
+       UGURU_WRITE(sc, UGURU_INDEX, idx);
+
+       for (i = 0; i < count; ++i) {
+               /*
+                * wait for non-busy status before write
+                * to the data port.
+                */
+               ntries = 0;
+               while (UGURU_READ(sc, UGURU_INDEX) >> 1 & 1) {
+                       if (++ntries > 20)
+                               goto timeout;
+                       DELAY(5);
+               }
+               UGURU_WRITE(sc, UGURU_DATA, *inbuf++);
+       }
+       return 0;
+
+timeout:
+       DPRINTF(0, "uguru_write_multi: timeout 0x%.2x\n", idx);
+       return 1;
+}
+
+int
+uguru_read_multi(struct uguru_softc *sc, void *data, int count)
+{
+       uint8_t *outbuf = data;
+       int i, ntries;
+
+       for (i = 0; i < count; ++i) {
+               /*
+                * wait for valid status before read
+                * from the data port.
+                */
+               ntries = 0;
+               while (!(UGURU_READ(sc, UGURU_INDEX) & 1)) {
+                       if (++ntries > 40) {
+                               DPRINTF(0, "uguru_read_multi: timeout\n");
+                               return 1;
+                       }
+                       DELAY(35);
+               }
+               *outbuf++ = UGURU_READ(sc, UGURU_DATA);
+       }
+       return 0;
+}
Index: sys/dev/isa/uguruvar.h
===================================================================
RCS file: sys/dev/isa/uguruvar.h
diff -N sys/dev/isa/uguruvar.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ sys/dev/isa/uguruvar.h      26 Mar 2010 09:11:06 -0000
@@ -0,0 +1,611 @@
+/*     $OpenBSD        */
+
+/*
+ * Copyright (c) 2010 Mikko Tolmunen <[email protected]>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#define UGURU_DATA             0x00    /* configuration data register */
+#define UGURU_INDEX            0x04    /* configuration index register */
+
+#define UGURU_DUMMY            0x00    /* dummy zero bit */
+#define UGURU_ITM_DATA         0x21    /* temp/volt readings */
+#define UGURU_ITM_CTRL         0x22    /* temp/volt settings */
+#define UGURU_FAN_DATA         0x26    /* fan readings */
+#define UGURU_FAN_CTRL         0x27    /* fan settings */
+#define UGURU_PRODID           0x44    /* product ID */
+
+#define UGURU_VENDID_ABIT      0x147b  /* ABIT */
+#define UGURU_DEVID1           0x2003  /* AC2003 */
+#define UGURU_DEVID2           0x2005  /* AC2005 */
+
+#define ABIT_SYSID_KV01                0x0301
+#define ABIT_SYSID_AI01                0x0302
+#define ABIT_SYSID_AN01                0x0303
+#define ABIT_SYSID_AA01                0x0304
+#define ABIT_SYSID_AG01                0x0305
+#define ABIT_SYSID_AV01                0x0306
+#define ABIT_SYSID_KVP1                0x0307
+#define ABIT_SYSID_AS01                0x0308
+#define ABIT_SYSID_AX01                0x0309
+#define ABIT_SYSID_M401                0x030a
+#define ABIT_SYSID_AN02                0x030b
+#define ABIT_SYSID_AU01                0x050c
+#define ABIT_SYSID_AW01                0x050d
+#define ABIT_SYSID_AL01                0x050e
+#define ABIT_SYSID_BL01                0x050f
+#define ABIT_SYSID_NI01                0x0510
+#define ABIT_SYSID_AT01                0x0511
+#define ABIT_SYSID_AN03                0x0512
+#define ABIT_SYSID_AW02                0x0513
+#define ABIT_SYSID_AB01                0x0514
+#define ABIT_SYSID_AN04                0x0515
+#define ABIT_SYSID_AW03                0x0516
+#define ABIT_SYSID_AT02                0x0517
+#define ABIT_SYSID_AB02                0x0518
+#define ABIT_SYSID_IN01                0x0519
+#define ABIT_SYSID_IP01                0x051a
+#define ABIT_SYSID_IX01                0x051b
+#define ABIT_SYSID_IX02                0x051c
+
+#define UGURU_IOSIZE           0x02
+#define UGURU_INTERVAL         5
+#define UGURU_MAX_SENSORS      27
+
+#define RFACT_NONE             13700
+#define RFACT_NONE2            10000
+#define RFACT(x, y)            (RFACT_NONE * ((x) + (y)) / (y))
+#define RFACT2(x, y)           (RFACT_NONE2 * ((x) + (y)) / (y))
+
+struct uguru_softc {
+       struct device            sc_dev;
+
+       bus_space_tag_t          sc_iot;
+       bus_space_handle_t       sc_ioh;
+
+       struct ksensor           sc_sensors[UGURU_MAX_SENSORS];
+       struct ksensordev        sc_sensordev;
+       int                      sc_numsensors;
+       struct uguru_sensor     *uguru_sensors;
+       struct {
+               uint8_t          reading;
+/*             uint8_t          flags; */
+               uint8_t          lower;
+               uint8_t          upper;
+       } cs;
+       int                     (*read)(struct uguru_softc *, int);
+};
+
+struct uguru_sensor {
+       char                    *desc;
+       enum sensor_type         type;
+       void                    (*refresh)(struct uguru_softc *, int);
+       uint8_t                  reg;
+       int                      rfact;
+};
+
+void   uguru_refresh_temp(struct uguru_softc *, int);
+void   uguru_refresh_volt(struct uguru_softc *, int);
+void   uguru_refresh_fan(struct uguru_softc *, int);
+
+#define UGURU_R_TEMP   uguru_refresh_temp
+#define UGURU_R_VOLT   uguru_refresh_volt
+#define UGURU_R_FAN    uguru_refresh_fan
+
+struct uguru_sensor abitkv_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT(2800, 887) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitaa_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
+       { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
+       { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x0c },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT(2800, 888) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
+       { "FSBVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
+       { "NB +2.5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitav_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
+       { "+3.3VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT(100, 402) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT_NONE },
+       { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
+       { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
+       { "AGP", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitas_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT(2800, 884) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
+       { "+3.3VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT(100, 402) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
+       { "FSBVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
+       { "NB/AGP", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
+       { "GMCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitax_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT(2800, 888) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT_NONE },
+       { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
+       { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
+       { "AUX", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitm4_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
+       { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x02 },
+       { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x03 },
+       { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x04 },
+       { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x05 },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT_NONE },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x13, RFACT(100, 402) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x12, RFACT(442, 560) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x11, RFACT(2800, 884) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x10, RFACT(442, 560) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
+       { "FSBVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT_NONE },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT_NONE },
+       { "NB +2.5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0c, RFACT_NONE },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
+       { "OTES1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
+       { "OTES2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitan_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT(2800, 844) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
+       { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
+       { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
+       { "MCP", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
+       { "MCP SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT_NONE },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
+       { "AUX", SENSOR_FANRPM, UGURU_R_FAN, 0x05 },
+       { "OTES1", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
+       { "OTES2", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
+
+       { NULL }
+};
+
+struct uguru_sensor abital_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT_NONE2 },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "MCH/PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+       { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
+       { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitaw_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+       { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
+       { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x1c },
+       { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x1d },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT_NONE2 },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "MCH/PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+       { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
+       { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+       { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x26 },
+       { "AUX5", SENSOR_FANRPM, UGURU_R_FAN, 0x27 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitni_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT_NONE2 },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+       { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+       { "OTES1", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "OTES2", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitat_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "NB", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT2(34, 34) },
+       { "PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0c, RFACT_NONE2 },
+       { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT_NONE2 },
+       { "NB +1.8V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+       { "NB +1.8V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitan2_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
+       { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+       { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitab_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT_NONE2 },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "ICHIO", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
+       { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
+       { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitan3_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
+       { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+       { "NB/PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE2 },
+       { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+       { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitaw2_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+       { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
+       { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x1c },
+       { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x1d },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "MCH/PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+       { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
+       { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+       { "OTES1", SENSOR_FANRPM, UGURU_R_FAN, 0x26 },
+       { "OTES2", SENSOR_FANRPM, UGURU_R_FAN, 0x27 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitat2_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+       { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT2(34, 34) },
+       { "PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0c, RFACT_NONE2 },
+       { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT_NONE2 },
+       { "NB +1.8V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+       { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+       { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitab2_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+       { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
+       { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x1c },
+       { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x1d },
+       { "PWM5", SENSOR_TEMP, UGURU_R_TEMP, 0x1e },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
+       { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "ICHIO", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
+       { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
+       { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+       { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+
+       { NULL }
+};
+
+struct uguru_sensor abitin_sensors[] = {
+       { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
+       { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
+       { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
+       { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
+       { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x1c },
+       { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x1d },
+       { "PWM5", SENSOR_TEMP, UGURU_R_TEMP, 0x1e },
+
+       { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT_NONE2 },
+       { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
+       { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0c, RFACT2(50, 10) },
+       { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
+       { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
+       { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT2(34, 34) },
+       { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE2 },
+       { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
+       { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
+       { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
+       { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
+
+       { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
+       { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
+       { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
+       { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
+       { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
+       { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
+
+       { NULL }
+};

Reply via email to