1*d095f713Snaddy /* $OpenBSD: uguru.c,v 1.7 2022/04/08 15:02:28 naddy Exp $ */
23a1bedeaSderaadt
33a1bedeaSderaadt /*
43a1bedeaSderaadt * Copyright (c) 2010 Mikko Tolmunen <oskari@sefirosu.org>
53a1bedeaSderaadt *
63a1bedeaSderaadt * Permission to use, copy, modify, and distribute this software for any
73a1bedeaSderaadt * purpose with or without fee is hereby granted, provided that the above
83a1bedeaSderaadt * copyright notice and this permission notice appear in all copies.
93a1bedeaSderaadt *
103a1bedeaSderaadt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
113a1bedeaSderaadt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
123a1bedeaSderaadt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
133a1bedeaSderaadt * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
143a1bedeaSderaadt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
153a1bedeaSderaadt * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
163a1bedeaSderaadt * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
173a1bedeaSderaadt */
183a1bedeaSderaadt
193a1bedeaSderaadt #include <sys/param.h>
203a1bedeaSderaadt #include <sys/systm.h>
213a1bedeaSderaadt #include <sys/device.h>
223a1bedeaSderaadt #include <sys/sensors.h>
233a1bedeaSderaadt
243a1bedeaSderaadt #include <machine/bus.h>
253a1bedeaSderaadt
263a1bedeaSderaadt #include <dev/isa/isavar.h>
273a1bedeaSderaadt
283a1bedeaSderaadt #ifdef UGURU_DEBUG
293a1bedeaSderaadt int uguru_dbg = 0;
303a1bedeaSderaadt #define DPRINTF(lvl, fmt...) \
313a1bedeaSderaadt if (uguru_dbg >= lvl) \
323a1bedeaSderaadt printf(fmt);
333a1bedeaSderaadt #else
343a1bedeaSderaadt #define DPRINTF(lvl, fmt...)
353a1bedeaSderaadt #endif
363a1bedeaSderaadt
373a1bedeaSderaadt #define UGURU_READ(iot, ioh, reg) \
383a1bedeaSderaadt bus_space_read_1((iot), (ioh), (reg))
393a1bedeaSderaadt #define UGURU_WRITE(iot, ioh, reg, val) \
403a1bedeaSderaadt bus_space_write_1((iot), (ioh), (reg), (val))
413a1bedeaSderaadt
423a1bedeaSderaadt #define UGURU_DATA 0x00 /* configuration data register */
433a1bedeaSderaadt #define UGURU_INDEX 0x04 /* configuration index register */
445c375225Sderaadt #define UGURU_IOSIZE 0x08
453a1bedeaSderaadt
463a1bedeaSderaadt #define UGURU_DUMMY 0x00 /* dummy zero bit */
473a1bedeaSderaadt #define UGURU_ITM_DATA 0x21 /* temp/volt readings */
483a1bedeaSderaadt #define UGURU_ITM_CTRL 0x22 /* temp/volt settings */
493a1bedeaSderaadt #define UGURU_FAN_DATA 0x26 /* fan readings */
503a1bedeaSderaadt #define UGURU_FAN_CTRL 0x27 /* fan settings */
513a1bedeaSderaadt #define UGURU_PRODID 0x44 /* product ID */
523a1bedeaSderaadt
533a1bedeaSderaadt #define UGURU_VENDID_ABIT 0x147b /* ABIT */
543a1bedeaSderaadt #define UGURU_DEVID1 0x2003 /* AC2003 */
553a1bedeaSderaadt #define UGURU_DEVID2 0x2005 /* AC2005 */
563a1bedeaSderaadt
573a1bedeaSderaadt #define ABIT_SYSID_KV01 0x0301
583a1bedeaSderaadt #define ABIT_SYSID_AI01 0x0302
593a1bedeaSderaadt #define ABIT_SYSID_AN01 0x0303
603a1bedeaSderaadt #define ABIT_SYSID_AA01 0x0304
613a1bedeaSderaadt #define ABIT_SYSID_AG01 0x0305
623a1bedeaSderaadt #define ABIT_SYSID_AV01 0x0306
633a1bedeaSderaadt #define ABIT_SYSID_KVP1 0x0307
643a1bedeaSderaadt #define ABIT_SYSID_AS01 0x0308
653a1bedeaSderaadt #define ABIT_SYSID_AX01 0x0309
663a1bedeaSderaadt #define ABIT_SYSID_M401 0x030a
673a1bedeaSderaadt #define ABIT_SYSID_AN02 0x030b
683a1bedeaSderaadt #define ABIT_SYSID_AU01 0x050c
693a1bedeaSderaadt #define ABIT_SYSID_AW01 0x050d
703a1bedeaSderaadt #define ABIT_SYSID_AL01 0x050e
713a1bedeaSderaadt #define ABIT_SYSID_BL01 0x050f
723a1bedeaSderaadt #define ABIT_SYSID_NI01 0x0510
733a1bedeaSderaadt #define ABIT_SYSID_AT01 0x0511
743a1bedeaSderaadt #define ABIT_SYSID_AN03 0x0512
753a1bedeaSderaadt #define ABIT_SYSID_AW02 0x0513
763a1bedeaSderaadt #define ABIT_SYSID_AB01 0x0514
773a1bedeaSderaadt #define ABIT_SYSID_AN04 0x0515
783a1bedeaSderaadt #define ABIT_SYSID_AW03 0x0516
793a1bedeaSderaadt #define ABIT_SYSID_AT02 0x0517
803a1bedeaSderaadt #define ABIT_SYSID_AB02 0x0518
813a1bedeaSderaadt #define ABIT_SYSID_IN01 0x0519
823a1bedeaSderaadt #define ABIT_SYSID_IP01 0x051a
833a1bedeaSderaadt #define ABIT_SYSID_IX01 0x051b
843a1bedeaSderaadt #define ABIT_SYSID_IX02 0x051c
853a1bedeaSderaadt
863a1bedeaSderaadt #define UGURU_INTERVAL 5
873a1bedeaSderaadt #define UGURU_MAX_SENSORS 27
883a1bedeaSderaadt
893a1bedeaSderaadt #define RFACT_NONE 13700
903a1bedeaSderaadt #define RFACT_NONE2 10000
913a1bedeaSderaadt #define RFACT(x, y) (RFACT_NONE * ((x) + (y)) / (y))
923a1bedeaSderaadt #define RFACT2(x, y) (RFACT_NONE2 * ((x) + (y)) / (y))
933a1bedeaSderaadt
943a1bedeaSderaadt struct uguru_softc {
953a1bedeaSderaadt struct device sc_dev;
963a1bedeaSderaadt
973a1bedeaSderaadt bus_space_tag_t sc_iot;
983a1bedeaSderaadt bus_space_handle_t sc_ioh;
993a1bedeaSderaadt
1003a1bedeaSderaadt struct ksensor sc_sensors[UGURU_MAX_SENSORS];
1013a1bedeaSderaadt struct ksensordev sc_sensordev;
1023a1bedeaSderaadt int sc_numsensors;
103*d095f713Snaddy const struct uguru_sensor *uguru_sensors;
1043a1bedeaSderaadt struct {
1053a1bedeaSderaadt uint8_t reading;
1063a1bedeaSderaadt /* uint8_t flags; */
1073a1bedeaSderaadt uint8_t lower;
1083a1bedeaSderaadt uint8_t upper;
1093a1bedeaSderaadt } cs;
1103a1bedeaSderaadt int (*read)(struct uguru_softc *, int);
1113a1bedeaSderaadt };
1123a1bedeaSderaadt
1133a1bedeaSderaadt struct uguru_sensor {
1143a1bedeaSderaadt char *desc;
1153a1bedeaSderaadt enum sensor_type type;
1163a1bedeaSderaadt void (*refresh)(struct uguru_softc *, int);
1173a1bedeaSderaadt uint8_t reg;
1183a1bedeaSderaadt int rfact;
1193a1bedeaSderaadt };
1203a1bedeaSderaadt
1213a1bedeaSderaadt void uguru_refresh_temp(struct uguru_softc *, int);
1223a1bedeaSderaadt void uguru_refresh_volt(struct uguru_softc *, int);
1233a1bedeaSderaadt void uguru_refresh_fan(struct uguru_softc *, int);
1243a1bedeaSderaadt
1253a1bedeaSderaadt #define UGURU_R_TEMP uguru_refresh_temp
1263a1bedeaSderaadt #define UGURU_R_VOLT uguru_refresh_volt
1273a1bedeaSderaadt #define UGURU_R_FAN uguru_refresh_fan
1283a1bedeaSderaadt
129*d095f713Snaddy const struct uguru_sensor abitkv_sensors[] = {
1303a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
1313a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
1323a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
1333a1bedeaSderaadt
1343a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
1353a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
1363a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
1373a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT(2800, 887) },
1383a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
1393a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
1403a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
1413a1bedeaSderaadt
1423a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
1433a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
1443a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
1453a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
1463a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
1473a1bedeaSderaadt
1483a1bedeaSderaadt { NULL }
1493a1bedeaSderaadt };
1503a1bedeaSderaadt
151*d095f713Snaddy const struct uguru_sensor abitaa_sensors[] = {
1523a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
1533a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
1543a1bedeaSderaadt { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
1553a1bedeaSderaadt { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x0c },
1563a1bedeaSderaadt
1573a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
1583a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
1593a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
1603a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT(2800, 888) },
1613a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
1623a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
1633a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
1643a1bedeaSderaadt { "FSBVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
1653a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
1663a1bedeaSderaadt { "NB +2.5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
1673a1bedeaSderaadt
1683a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
1693a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
1703a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
1713a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
1723a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
1733a1bedeaSderaadt
1743a1bedeaSderaadt { NULL }
1753a1bedeaSderaadt };
1763a1bedeaSderaadt
177*d095f713Snaddy const struct uguru_sensor abitav_sensors[] = {
1783a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
1793a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
1803a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
1813a1bedeaSderaadt
1823a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
1833a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
1843a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
1853a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
1863a1bedeaSderaadt { "+3.3VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT(100, 402) },
1873a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
1883a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
1893a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT_NONE },
1903a1bedeaSderaadt { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
1913a1bedeaSderaadt { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
1923a1bedeaSderaadt { "AGP", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
1933a1bedeaSderaadt
1943a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
1953a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
1963a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
1973a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
1983a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
1993a1bedeaSderaadt
2003a1bedeaSderaadt { NULL }
2013a1bedeaSderaadt };
2023a1bedeaSderaadt
203*d095f713Snaddy const struct uguru_sensor abitas_sensors[] = {
2043a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
2053a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
2063a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
2073a1bedeaSderaadt
2083a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
2093a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
2103a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
2113a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT(2800, 884) },
2123a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
2133a1bedeaSderaadt { "+3.3VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT(100, 402) },
2143a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
2153a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
2163a1bedeaSderaadt { "FSBVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
2173a1bedeaSderaadt { "NB/AGP", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
2183a1bedeaSderaadt { "GMCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
2193a1bedeaSderaadt
2203a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
2213a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
2223a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
2233a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
2243a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
2253a1bedeaSderaadt
2263a1bedeaSderaadt { NULL }
2273a1bedeaSderaadt };
2283a1bedeaSderaadt
229*d095f713Snaddy const struct uguru_sensor abitax_sensors[] = {
2303a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
2313a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
2323a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
2333a1bedeaSderaadt
2343a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
2353a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
2363a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
2373a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT(2800, 888) },
2383a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
2393a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
2403a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
2413a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT_NONE },
2423a1bedeaSderaadt { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
2433a1bedeaSderaadt { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
2443a1bedeaSderaadt
2453a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
2463a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
2473a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
2483a1bedeaSderaadt { "AUX", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
2493a1bedeaSderaadt
2503a1bedeaSderaadt { NULL }
2513a1bedeaSderaadt };
2523a1bedeaSderaadt
253*d095f713Snaddy const struct uguru_sensor abitm4_sensors[] = {
2543a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
2553a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
2563a1bedeaSderaadt { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x02 },
2573a1bedeaSderaadt { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x03 },
2583a1bedeaSderaadt { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x04 },
2593a1bedeaSderaadt { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x05 },
2603a1bedeaSderaadt
2613a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT_NONE },
2623a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x13, RFACT(100, 402) },
2633a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x12, RFACT(442, 560) },
2643a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x11, RFACT(2800, 884) },
2653a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x10, RFACT(442, 560) },
2663a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
2673a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
2683a1bedeaSderaadt { "FSBVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT_NONE },
2693a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT_NONE },
2703a1bedeaSderaadt { "NB +2.5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0c, RFACT_NONE },
2713a1bedeaSderaadt
2723a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
2733a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
2743a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
2753a1bedeaSderaadt { "OTES1", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
2763a1bedeaSderaadt { "OTES2", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
2773a1bedeaSderaadt
2783a1bedeaSderaadt { NULL }
2793a1bedeaSderaadt };
2803a1bedeaSderaadt
281*d095f713Snaddy const struct uguru_sensor abitan_sensors[] = {
2823a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x00 },
2833a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x01 },
2843a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x0f },
2853a1bedeaSderaadt
2863a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE },
2873a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT(100, 402) },
2883a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT(442, 560) },
2893a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT(2800, 844) },
2903a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT(442, 560) },
2913a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE },
2923a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT_NONE },
2933a1bedeaSderaadt { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE },
2943a1bedeaSderaadt { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE },
2953a1bedeaSderaadt { "MCP", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT_NONE },
2963a1bedeaSderaadt { "MCP SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT_NONE },
2973a1bedeaSderaadt
2983a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x00 },
2993a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x01 },
3003a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x02 },
3013a1bedeaSderaadt { "AUX", SENSOR_FANRPM, UGURU_R_FAN, 0x05 },
3023a1bedeaSderaadt { "OTES1", SENSOR_FANRPM, UGURU_R_FAN, 0x04 },
3033a1bedeaSderaadt { "OTES2", SENSOR_FANRPM, UGURU_R_FAN, 0x03 },
3043a1bedeaSderaadt
3053a1bedeaSderaadt { NULL }
3063a1bedeaSderaadt };
3073a1bedeaSderaadt
308*d095f713Snaddy const struct uguru_sensor abital_sensors[] = {
3093a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
3103a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
3113a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
3123a1bedeaSderaadt
3133a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
3143a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
3153a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
3163a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
3173a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
3183a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
3193a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT_NONE2 },
3203a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
3213a1bedeaSderaadt { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
3223a1bedeaSderaadt { "MCH/PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
3233a1bedeaSderaadt { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
3243a1bedeaSderaadt { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
3253a1bedeaSderaadt
3263a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
3273a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
3283a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
3293a1bedeaSderaadt { "AUX", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
3303a1bedeaSderaadt
3313a1bedeaSderaadt { NULL }
3323a1bedeaSderaadt };
3333a1bedeaSderaadt
334*d095f713Snaddy const struct uguru_sensor abitaw_sensors[] = {
3353a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
3363a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
3373a1bedeaSderaadt { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
3383a1bedeaSderaadt { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
3393a1bedeaSderaadt { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x1c },
3403a1bedeaSderaadt { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x1d },
3413a1bedeaSderaadt
3423a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
3433a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
3443a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
3453a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
3463a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
3473a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
3483a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT_NONE2 },
3493a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
3503a1bedeaSderaadt { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
3513a1bedeaSderaadt { "MCH/PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
3523a1bedeaSderaadt { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
3533a1bedeaSderaadt { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
3543a1bedeaSderaadt
3553a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
3563a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
3573a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
3583a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
3593a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
3603a1bedeaSderaadt { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
3613a1bedeaSderaadt { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x26 },
3623a1bedeaSderaadt { "AUX5", SENSOR_FANRPM, UGURU_R_FAN, 0x27 },
3633a1bedeaSderaadt
3643a1bedeaSderaadt { NULL }
3653a1bedeaSderaadt };
3663a1bedeaSderaadt
367*d095f713Snaddy const struct uguru_sensor abitni_sensors[] = {
3683a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
3693a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
3703a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
3713a1bedeaSderaadt
3723a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
3733a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
3743a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
3753a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
3763a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
3773a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
3783a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT_NONE2 },
3793a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
3803a1bedeaSderaadt { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
3813a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
3823a1bedeaSderaadt { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
3833a1bedeaSderaadt
3843a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
3853a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
3863a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
3873a1bedeaSderaadt { "AUX", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
3883a1bedeaSderaadt { "OTES1", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
3893a1bedeaSderaadt { "OTES2", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
3903a1bedeaSderaadt
3913a1bedeaSderaadt { NULL }
3923a1bedeaSderaadt };
3933a1bedeaSderaadt
394*d095f713Snaddy const struct uguru_sensor abitat_sensors[] = {
3953a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
3963a1bedeaSderaadt { "NB", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
3973a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
3983a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
3993a1bedeaSderaadt
4003a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
4013a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
4023a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
4033a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
4043a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
4053a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
4063a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
4073a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
4083a1bedeaSderaadt { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT2(34, 34) },
4093a1bedeaSderaadt { "PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0c, RFACT_NONE2 },
4103a1bedeaSderaadt { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
4113a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT_NONE2 },
4123a1bedeaSderaadt { "NB +1.8V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
4133a1bedeaSderaadt { "NB +1.8V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
4143a1bedeaSderaadt
4153a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
4163a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
4173a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
4183a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
4193a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
4203a1bedeaSderaadt { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
4213a1bedeaSderaadt
4223a1bedeaSderaadt { NULL }
4233a1bedeaSderaadt };
4243a1bedeaSderaadt
425*d095f713Snaddy const struct uguru_sensor abitan2_sensors[] = {
4263a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
4273a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
4283a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
4293a1bedeaSderaadt
4303a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
4313a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
4323a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
4333a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
4343a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
4353a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
4363a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
4373a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
4383a1bedeaSderaadt { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
4393a1bedeaSderaadt { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
4403a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
4413a1bedeaSderaadt { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
4423a1bedeaSderaadt
4433a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
4443a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
4453a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
4463a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
4473a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
4483a1bedeaSderaadt
4493a1bedeaSderaadt { NULL }
4503a1bedeaSderaadt };
4513a1bedeaSderaadt
452*d095f713Snaddy const struct uguru_sensor abitab_sensors[] = {
4533a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
4543a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
4553a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
4563a1bedeaSderaadt
4573a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
4583a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
4593a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
4603a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
4613a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
4623a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
4633a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT_NONE2 },
4643a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
4653a1bedeaSderaadt { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
4663a1bedeaSderaadt { "ICHIO", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
4673a1bedeaSderaadt { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
4683a1bedeaSderaadt { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
4693a1bedeaSderaadt
4703a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
4713a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
4723a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
4733a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
4743a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
4753a1bedeaSderaadt { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
4763a1bedeaSderaadt
4773a1bedeaSderaadt { NULL }
4783a1bedeaSderaadt };
4793a1bedeaSderaadt
480*d095f713Snaddy const struct uguru_sensor abitan3_sensors[] = {
4813a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
4823a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
4833a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
4843a1bedeaSderaadt
4853a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
4863a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
4873a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
4883a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
4893a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
4903a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
4913a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
4923a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
4933a1bedeaSderaadt { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
4943a1bedeaSderaadt { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
4953a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
4963a1bedeaSderaadt { "NB/PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE2 },
4973a1bedeaSderaadt { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
4983a1bedeaSderaadt
4993a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
5003a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
5013a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
5023a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
5033a1bedeaSderaadt { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
5043a1bedeaSderaadt { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
5053a1bedeaSderaadt
5063a1bedeaSderaadt { NULL }
5073a1bedeaSderaadt };
5083a1bedeaSderaadt
509*d095f713Snaddy const struct uguru_sensor abitaw2_sensors[] = {
5103a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
5113a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
5123a1bedeaSderaadt { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
5133a1bedeaSderaadt { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
5143a1bedeaSderaadt { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x1c },
5153a1bedeaSderaadt { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x1d },
5163a1bedeaSderaadt
5173a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
5183a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
5193a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
5203a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
5213a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
5223a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
5233a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
5243a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
5253a1bedeaSderaadt { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
5263a1bedeaSderaadt { "MCH/PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
5273a1bedeaSderaadt { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT2(34, 34) },
5283a1bedeaSderaadt { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
5293a1bedeaSderaadt
5303a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
5313a1bedeaSderaadt { "NB", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
5323a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
5333a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
5343a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
5353a1bedeaSderaadt { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
5363a1bedeaSderaadt { "OTES1", SENSOR_FANRPM, UGURU_R_FAN, 0x26 },
5373a1bedeaSderaadt { "OTES2", SENSOR_FANRPM, UGURU_R_FAN, 0x27 },
5383a1bedeaSderaadt
5393a1bedeaSderaadt { NULL }
5403a1bedeaSderaadt };
5413a1bedeaSderaadt
542*d095f713Snaddy const struct uguru_sensor abitat2_sensors[] = {
5433a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
5443a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
5453a1bedeaSderaadt { "PWM", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
5463a1bedeaSderaadt
5473a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
5483a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
5493a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
5503a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
5513a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
5523a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
5533a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
5543a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
5553a1bedeaSderaadt { "CPUVDDA", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT2(34, 34) },
5563a1bedeaSderaadt { "PCIE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0c, RFACT_NONE2 },
5573a1bedeaSderaadt { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
5583a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT_NONE2 },
5593a1bedeaSderaadt { "NB +1.8V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
5603a1bedeaSderaadt { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
5613a1bedeaSderaadt
5623a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
5633a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
5643a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
5653a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
5663a1bedeaSderaadt { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
5673a1bedeaSderaadt { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
5683a1bedeaSderaadt
5693a1bedeaSderaadt { NULL }
5703a1bedeaSderaadt };
5713a1bedeaSderaadt
572*d095f713Snaddy const struct uguru_sensor abitab2_sensors[] = {
5733a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
5743a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
5753a1bedeaSderaadt { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
5763a1bedeaSderaadt { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
5773a1bedeaSderaadt { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x1c },
5783a1bedeaSderaadt { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x1d },
5793a1bedeaSderaadt { "PWM5", SENSOR_TEMP, UGURU_R_TEMP, 0x1e },
5803a1bedeaSderaadt
5813a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x00, RFACT_NONE2 },
5823a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
5833a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
5843a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT2(50, 10) },
5853a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
5863a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
5873a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x01, RFACT2(34, 34) },
5883a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x02, RFACT_NONE2 },
5893a1bedeaSderaadt { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
5903a1bedeaSderaadt { "ICHIO", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
5913a1bedeaSderaadt { "ICH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
5923a1bedeaSderaadt { "MCH", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
5933a1bedeaSderaadt
5943a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
5953a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
5963a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
5973a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
5983a1bedeaSderaadt { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
5993a1bedeaSderaadt { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
6003a1bedeaSderaadt
6013a1bedeaSderaadt { NULL }
6023a1bedeaSderaadt };
6033a1bedeaSderaadt
604*d095f713Snaddy const struct uguru_sensor abitin_sensors[] = {
6053a1bedeaSderaadt { "CPU", SENSOR_TEMP, UGURU_R_TEMP, 0x18 },
6063a1bedeaSderaadt { "SYS", SENSOR_TEMP, UGURU_R_TEMP, 0x19 },
6073a1bedeaSderaadt { "PWM1", SENSOR_TEMP, UGURU_R_TEMP, 0x1a },
6083a1bedeaSderaadt { "PWM2", SENSOR_TEMP, UGURU_R_TEMP, 0x1b },
6093a1bedeaSderaadt { "PWM3", SENSOR_TEMP, UGURU_R_TEMP, 0x1c },
6103a1bedeaSderaadt { "PWM4", SENSOR_TEMP, UGURU_R_TEMP, 0x1d },
6113a1bedeaSderaadt { "PWM5", SENSOR_TEMP, UGURU_R_TEMP, 0x1e },
6123a1bedeaSderaadt
6133a1bedeaSderaadt { "VCORE", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x07, RFACT_NONE2 },
6143a1bedeaSderaadt { "+3.3V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0a, RFACT2(34, 34) },
6153a1bedeaSderaadt { "+5V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x09, RFACT2(120, 60) },
6163a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0c, RFACT2(50, 10) },
6173a1bedeaSderaadt { "+12V", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x08, RFACT2(50, 10) },
6183a1bedeaSderaadt { "+5VSB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0b, RFACT2(120, 60) },
6193a1bedeaSderaadt { "DDR", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0d, RFACT2(34, 34) },
6203a1bedeaSderaadt { "DDRVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x0e, RFACT_NONE2 },
6213a1bedeaSderaadt { "CPUVTT", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x03, RFACT_NONE2 },
6223a1bedeaSderaadt { "HTV", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x05, RFACT_NONE2 },
6233a1bedeaSderaadt { "NB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x04, RFACT_NONE2 },
6243a1bedeaSderaadt { "SB", SENSOR_VOLTS_DC, UGURU_R_VOLT, 0x06, RFACT_NONE2 },
6253a1bedeaSderaadt
6263a1bedeaSderaadt { "CPU", SENSOR_FANRPM, UGURU_R_FAN, 0x20 },
6273a1bedeaSderaadt { "SYS", SENSOR_FANRPM, UGURU_R_FAN, 0x22 },
6283a1bedeaSderaadt { "AUX1", SENSOR_FANRPM, UGURU_R_FAN, 0x21 },
6293a1bedeaSderaadt { "AUX2", SENSOR_FANRPM, UGURU_R_FAN, 0x23 },
6303a1bedeaSderaadt { "AUX3", SENSOR_FANRPM, UGURU_R_FAN, 0x24 },
6313a1bedeaSderaadt { "AUX4", SENSOR_FANRPM, UGURU_R_FAN, 0x25 },
6323a1bedeaSderaadt
6333a1bedeaSderaadt { NULL }
6343a1bedeaSderaadt };
6353a1bedeaSderaadt
6363a1bedeaSderaadt int uguru_match(struct device *, void *, void *);
6373a1bedeaSderaadt void uguru_attach(struct device *, struct device *, void *);
6383a1bedeaSderaadt void uguru_refresh(void *);
6393a1bedeaSderaadt int uguru_read_sensor(struct uguru_softc *, int);
6403a1bedeaSderaadt int uguru_ac5_read_sensor(struct uguru_softc *, int);
6413a1bedeaSderaadt int uguru_ac5_read(bus_space_tag_t, bus_space_handle_t,
6423a1bedeaSderaadt uint16_t, void *, int);
6433a1bedeaSderaadt int uguru_write_multi(bus_space_tag_t, bus_space_handle_t,
6443a1bedeaSderaadt uint8_t, void *, int);
6453a1bedeaSderaadt int uguru_read_multi(bus_space_tag_t, bus_space_handle_t, void *, int);
6463a1bedeaSderaadt
6473a1bedeaSderaadt struct cfdriver uguru_cd = {
6483a1bedeaSderaadt NULL, "uguru", DV_DULL
6493a1bedeaSderaadt };
6503a1bedeaSderaadt
651471aeecfSnaddy const struct cfattach uguru_ca = {
6523a1bedeaSderaadt sizeof(struct uguru_softc), uguru_match, uguru_attach
6533a1bedeaSderaadt };
6543a1bedeaSderaadt
6553a1bedeaSderaadt int
uguru_match(struct device * parent,void * match,void * aux)6563a1bedeaSderaadt uguru_match(struct device *parent, void *match, void *aux)
6573a1bedeaSderaadt {
6583a1bedeaSderaadt struct isa_attach_args *ia = aux;
6593a1bedeaSderaadt bus_space_tag_t iot;
6603a1bedeaSderaadt bus_space_handle_t ioh;
6613a1bedeaSderaadt uint8_t data[9];
6623a1bedeaSderaadt uint16_t vendid, devid;
6633a1bedeaSderaadt int ret = 0;
6643a1bedeaSderaadt
6653a1bedeaSderaadt iot = ia->ia_iot;
6663a1bedeaSderaadt if (bus_space_map(iot, ia->ipa_io[0].base, UGURU_IOSIZE, 0, &ioh)) {
6673a1bedeaSderaadt DPRINTF(0, ": can't map i/o space\n");
6683a1bedeaSderaadt return 0;
6693a1bedeaSderaadt }
6703a1bedeaSderaadt
6713a1bedeaSderaadt UGURU_WRITE(iot, ioh, UGURU_INDEX, UGURU_PRODID);
6723a1bedeaSderaadt if (!uguru_read_multi(iot, ioh, &data, sizeof(data)) ||
6733a1bedeaSderaadt !uguru_ac5_read(iot, ioh, 0x0904, &data, sizeof(data))) {
6743a1bedeaSderaadt vendid = data[0] << 8 | data[1];
6753a1bedeaSderaadt devid = data[2] << 8 | data[3];
6763a1bedeaSderaadt
6773a1bedeaSderaadt if (vendid == UGURU_VENDID_ABIT &&
6783a1bedeaSderaadt (devid == UGURU_DEVID1 ||
6793a1bedeaSderaadt devid == UGURU_DEVID2)) {
6803a1bedeaSderaadt ia->ipa_nio = 1;
6813a1bedeaSderaadt ia->ipa_io[0].length = UGURU_IOSIZE;
6823a1bedeaSderaadt ia->ipa_nmem = 0;
6833a1bedeaSderaadt ia->ipa_nirq = 0;
6843a1bedeaSderaadt ia->ipa_ndrq = 0;
6853a1bedeaSderaadt ret = 1;
6863a1bedeaSderaadt }
6873a1bedeaSderaadt }
6883a1bedeaSderaadt bus_space_unmap(iot, ioh, UGURU_IOSIZE);
6893a1bedeaSderaadt return (ret);
6903a1bedeaSderaadt }
6913a1bedeaSderaadt
6923a1bedeaSderaadt void
uguru_attach(struct device * parent,struct device * self,void * aux)6933a1bedeaSderaadt uguru_attach(struct device *parent, struct device *self, void *aux)
6943a1bedeaSderaadt {
6953a1bedeaSderaadt struct uguru_softc *sc = (void *)self;
6963a1bedeaSderaadt struct isa_attach_args *ia = aux;
697*d095f713Snaddy const struct uguru_sensor *sensors;
6983a1bedeaSderaadt uint8_t data[9];
6993a1bedeaSderaadt uint16_t vendid, devid, sysid;
7003a1bedeaSderaadt int i;
7013a1bedeaSderaadt
7023a1bedeaSderaadt sc->sc_iot = ia->ia_iot;
7033a1bedeaSderaadt if (bus_space_map(sc->sc_iot, ia->ipa_io[0].base,
7043a1bedeaSderaadt UGURU_IOSIZE, 0, &sc->sc_ioh)) {
7053a1bedeaSderaadt printf(": can't map i/o space\n");
7063a1bedeaSderaadt return;
7073a1bedeaSderaadt }
7083a1bedeaSderaadt
7093a1bedeaSderaadt UGURU_WRITE(sc->sc_iot, sc->sc_ioh, UGURU_INDEX, UGURU_PRODID);
7103a1bedeaSderaadt if (!uguru_read_multi(sc->sc_iot, sc->sc_ioh, &data, sizeof(data))) {
7113a1bedeaSderaadt sc->read = uguru_read_sensor;
7123a1bedeaSderaadt goto done;
7133a1bedeaSderaadt }
7143a1bedeaSderaadt
7153a1bedeaSderaadt /* AC2005 product ID */
7163a1bedeaSderaadt if (!uguru_ac5_read(sc->sc_iot, sc->sc_ioh,
7173a1bedeaSderaadt 0x0904, &data, sizeof(data))) {
7183a1bedeaSderaadt sc->read = uguru_ac5_read_sensor;
7193a1bedeaSderaadt goto done;
7203a1bedeaSderaadt }
7213a1bedeaSderaadt
7223a1bedeaSderaadt printf("\n");
7233a1bedeaSderaadt return;
7243a1bedeaSderaadt
7253a1bedeaSderaadt done:
7263a1bedeaSderaadt DPRINTF(5, ": %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x",
7273a1bedeaSderaadt data[0], data[1], data[2], data[3], data[4],
7283a1bedeaSderaadt data[5], data[6], data[7], data[8]);
7293a1bedeaSderaadt
7303a1bedeaSderaadt vendid = data[0] << 8 | data[1];
7313a1bedeaSderaadt devid = data[2] << 8 | data[3];
7323a1bedeaSderaadt sysid = data[3] << 8 | data[7];
7333a1bedeaSderaadt
7343a1bedeaSderaadt if (vendid != UGURU_VENDID_ABIT ||
7353a1bedeaSderaadt (devid != UGURU_DEVID1 &&
7363a1bedeaSderaadt devid != UGURU_DEVID2)) {
7373a1bedeaSderaadt printf(": attach failed\n");
7383a1bedeaSderaadt return;
7393a1bedeaSderaadt }
7403a1bedeaSderaadt printf(": AC%x", devid);
7413a1bedeaSderaadt
7423a1bedeaSderaadt switch(sysid) {
7433a1bedeaSderaadt case ABIT_SYSID_KV01:
7443a1bedeaSderaadt case ABIT_SYSID_AI01:
7453a1bedeaSderaadt case ABIT_SYSID_AN01:
7463a1bedeaSderaadt printf(" KV1");
7473a1bedeaSderaadt sensors = abitkv_sensors;
7483a1bedeaSderaadt break;
7493a1bedeaSderaadt case ABIT_SYSID_AA01:
7503a1bedeaSderaadt case ABIT_SYSID_AG01:
7513a1bedeaSderaadt printf(" AA1");
7523a1bedeaSderaadt sensors = abitaa_sensors;
7533a1bedeaSderaadt break;
7543a1bedeaSderaadt case ABIT_SYSID_AV01:
7553a1bedeaSderaadt case ABIT_SYSID_KVP1:
7563a1bedeaSderaadt printf(" AV1");
7573a1bedeaSderaadt sensors = abitav_sensors;
7583a1bedeaSderaadt break;
7593a1bedeaSderaadt case ABIT_SYSID_AS01:
7603a1bedeaSderaadt printf(" AS1");
7613a1bedeaSderaadt sensors = abitas_sensors;
7623a1bedeaSderaadt break;
7633a1bedeaSderaadt case ABIT_SYSID_AX01:
7643a1bedeaSderaadt printf(" AX1");
7653a1bedeaSderaadt sensors = abitax_sensors;
7663a1bedeaSderaadt break;
7673a1bedeaSderaadt case ABIT_SYSID_M401:
7683a1bedeaSderaadt printf(" M41");
7693a1bedeaSderaadt sensors = abitm4_sensors;
7703a1bedeaSderaadt break;
7713a1bedeaSderaadt case ABIT_SYSID_AN02:
7723a1bedeaSderaadt printf(" AN1");
7733a1bedeaSderaadt sensors = abitan_sensors;
7743a1bedeaSderaadt break;
7753a1bedeaSderaadt case ABIT_SYSID_AU01:
7763a1bedeaSderaadt case ABIT_SYSID_AL01:
7773a1bedeaSderaadt case ABIT_SYSID_BL01:
7783a1bedeaSderaadt printf(" AL1");
7793a1bedeaSderaadt sensors = abital_sensors;
7803a1bedeaSderaadt break;
7813a1bedeaSderaadt case ABIT_SYSID_AW01:
7823a1bedeaSderaadt case ABIT_SYSID_AW02:
7833a1bedeaSderaadt printf(" AW1");
7843a1bedeaSderaadt sensors = abitaw_sensors;
7853a1bedeaSderaadt break;
7863a1bedeaSderaadt case ABIT_SYSID_NI01:
7873a1bedeaSderaadt printf(" NI1");
7883a1bedeaSderaadt sensors = abitni_sensors;
7893a1bedeaSderaadt break;
7903a1bedeaSderaadt case ABIT_SYSID_AT01:
7913a1bedeaSderaadt printf(" AT1");
7923a1bedeaSderaadt sensors = abitat_sensors;
7933a1bedeaSderaadt break;
7943a1bedeaSderaadt case ABIT_SYSID_AN03:
7953a1bedeaSderaadt printf(" AN2");
7963a1bedeaSderaadt sensors = abitan2_sensors;
7973a1bedeaSderaadt break;
7983a1bedeaSderaadt case ABIT_SYSID_AB01:
7993a1bedeaSderaadt printf(" AB1");
8003a1bedeaSderaadt sensors = abitab_sensors;
8013a1bedeaSderaadt break;
8023a1bedeaSderaadt case ABIT_SYSID_AN04:
8033a1bedeaSderaadt printf(" AN3");
8043a1bedeaSderaadt sensors = abitan3_sensors;
8053a1bedeaSderaadt break;
8063a1bedeaSderaadt case ABIT_SYSID_AW03:
8073a1bedeaSderaadt printf(" AW2");
8083a1bedeaSderaadt sensors = abitaw2_sensors;
8093a1bedeaSderaadt break;
8103a1bedeaSderaadt case ABIT_SYSID_AT02:
8113a1bedeaSderaadt printf(" AT2");
8123a1bedeaSderaadt sensors = abitat2_sensors;
8133a1bedeaSderaadt break;
8143a1bedeaSderaadt case ABIT_SYSID_AB02:
8153a1bedeaSderaadt case ABIT_SYSID_IP01:
8163a1bedeaSderaadt case ABIT_SYSID_IX01:
8173a1bedeaSderaadt case ABIT_SYSID_IX02:
8183a1bedeaSderaadt printf(" AB2");
8193a1bedeaSderaadt sensors = abitab2_sensors;
8203a1bedeaSderaadt break;
8213a1bedeaSderaadt case ABIT_SYSID_IN01:
8223a1bedeaSderaadt printf(" IN1");
8233a1bedeaSderaadt sensors = abitin_sensors;
8243a1bedeaSderaadt break;
8253a1bedeaSderaadt default:
8263a1bedeaSderaadt printf(" unknown system (ID 0x%.4x)\n", sysid);
8273a1bedeaSderaadt return;
8283a1bedeaSderaadt }
8293a1bedeaSderaadt printf("\n");
8303a1bedeaSderaadt
8313a1bedeaSderaadt strlcpy(sc->sc_sensordev.xname,
8323a1bedeaSderaadt sc->sc_dev.dv_xname,
8333a1bedeaSderaadt sizeof(sc->sc_sensordev.xname));
8343a1bedeaSderaadt
8353a1bedeaSderaadt for (i = 0; sensors[i].desc != NULL; i++) {
8363a1bedeaSderaadt strlcpy(sc->sc_sensors[i].desc,
8373a1bedeaSderaadt sensors[i].desc, sizeof(sc->sc_sensors[i].desc));
8383a1bedeaSderaadt sc->sc_sensors[i].type = sensors[i].type;
8393a1bedeaSderaadt sensor_attach(&sc->sc_sensordev, &sc->sc_sensors[i]);
8403a1bedeaSderaadt sc->sc_numsensors++;
8413a1bedeaSderaadt }
8423a1bedeaSderaadt sc->uguru_sensors = sensors;
8433a1bedeaSderaadt
8443a1bedeaSderaadt if (sensor_task_register(sc, uguru_refresh, UGURU_INTERVAL) == NULL) {
8453a1bedeaSderaadt printf("%s: unable to register update task\n",
8463a1bedeaSderaadt sc->sc_sensordev.xname);
8473a1bedeaSderaadt return;
8483a1bedeaSderaadt }
8493a1bedeaSderaadt sensordev_install(&sc->sc_sensordev);
8503a1bedeaSderaadt }
8513a1bedeaSderaadt
8523a1bedeaSderaadt void
uguru_refresh(void * arg)8533a1bedeaSderaadt uguru_refresh(void *arg)
8543a1bedeaSderaadt {
8553a1bedeaSderaadt struct uguru_softc *sc = (struct uguru_softc *)arg;
8563a1bedeaSderaadt int i;
8573a1bedeaSderaadt
8583a1bedeaSderaadt for (i = 0; i < sc->sc_numsensors; i++)
8593a1bedeaSderaadt sc->uguru_sensors[i].refresh(sc, i);
8603a1bedeaSderaadt }
8613a1bedeaSderaadt
8623a1bedeaSderaadt void
uguru_refresh_temp(struct uguru_softc * sc,int n)8633a1bedeaSderaadt uguru_refresh_temp(struct uguru_softc *sc, int n)
8643a1bedeaSderaadt {
8653a1bedeaSderaadt struct ksensor *sensor = &sc->sc_sensors[n];
8663a1bedeaSderaadt int status = SENSOR_S_OK;
8673a1bedeaSderaadt int ret;
8683a1bedeaSderaadt
8693a1bedeaSderaadt ret = sc->read(sc, n);
8703a1bedeaSderaadt if (sc->cs.reading == 0x00) {
8713a1bedeaSderaadt sensor->flags |= SENSOR_FINVALID;
8723a1bedeaSderaadt sensor->value = 0;
8733a1bedeaSderaadt return;
8743a1bedeaSderaadt }
8753a1bedeaSderaadt sensor->flags &= ~SENSOR_FINVALID;
8763a1bedeaSderaadt sensor->value = sc->cs.reading * 1000000 + 273150000;
8773a1bedeaSderaadt
8783a1bedeaSderaadt if (ret)
8793a1bedeaSderaadt status = SENSOR_S_UNSPEC;
8803a1bedeaSderaadt else {
8813a1bedeaSderaadt if (sc->cs.reading >= sc->cs.lower)
8823a1bedeaSderaadt status = SENSOR_S_WARN;
8833a1bedeaSderaadt if (sc->cs.reading >= sc->cs.upper)
8843a1bedeaSderaadt status = SENSOR_S_CRIT;
8853a1bedeaSderaadt }
8863a1bedeaSderaadt sensor->status = status;
8873a1bedeaSderaadt }
8883a1bedeaSderaadt
8893a1bedeaSderaadt void
uguru_refresh_volt(struct uguru_softc * sc,int n)8903a1bedeaSderaadt uguru_refresh_volt(struct uguru_softc *sc, int n)
8913a1bedeaSderaadt {
8923a1bedeaSderaadt int status = SENSOR_S_OK;
8933a1bedeaSderaadt
8943a1bedeaSderaadt if (sc->read(sc, n))
8953a1bedeaSderaadt status = SENSOR_S_UNSPEC;
8963a1bedeaSderaadt else
8973a1bedeaSderaadt if (sc->cs.reading <= sc->cs.lower ||
8983a1bedeaSderaadt sc->cs.reading >= sc->cs.upper)
8993a1bedeaSderaadt status = SENSOR_S_CRIT;
9003a1bedeaSderaadt
9013a1bedeaSderaadt sc->sc_sensors[n].value =
9023a1bedeaSderaadt sc->cs.reading * sc->uguru_sensors[n].rfact;
9033a1bedeaSderaadt sc->sc_sensors[n].status = status;
9043a1bedeaSderaadt }
9053a1bedeaSderaadt
9063a1bedeaSderaadt void
uguru_refresh_fan(struct uguru_softc * sc,int n)9073a1bedeaSderaadt uguru_refresh_fan(struct uguru_softc *sc, int n)
9083a1bedeaSderaadt {
9093a1bedeaSderaadt struct ksensor *sensor = &sc->sc_sensors[n];
9103a1bedeaSderaadt int ret;
9113a1bedeaSderaadt
9123a1bedeaSderaadt ret = sc->read(sc, n);
9133a1bedeaSderaadt if (sc->cs.reading == 0x00) {
9143a1bedeaSderaadt sensor->flags |= SENSOR_FINVALID;
9153a1bedeaSderaadt sensor->value = 0;
9163a1bedeaSderaadt return;
9173a1bedeaSderaadt }
9183a1bedeaSderaadt sensor->flags &= ~SENSOR_FINVALID;
9193a1bedeaSderaadt sensor->value = sc->cs.reading * 60;
9203a1bedeaSderaadt
9213a1bedeaSderaadt if (ret)
9223a1bedeaSderaadt sensor->status = SENSOR_S_UNSPEC;
9233a1bedeaSderaadt else
9243a1bedeaSderaadt if (sc->cs.reading <= sc->cs.lower)
9253a1bedeaSderaadt sensor->status = SENSOR_S_CRIT;
9263a1bedeaSderaadt else
9273a1bedeaSderaadt sensor->status = SENSOR_S_OK;
9283a1bedeaSderaadt }
9293a1bedeaSderaadt
9303a1bedeaSderaadt int
uguru_read_sensor(struct uguru_softc * sc,int n)9313a1bedeaSderaadt uguru_read_sensor(struct uguru_softc *sc, int n)
9323a1bedeaSderaadt {
9333a1bedeaSderaadt struct ksensor *sensor = &sc->sc_sensors[n];
9343a1bedeaSderaadt bus_space_tag_t iot = sc->sc_iot;
9353a1bedeaSderaadt bus_space_handle_t ioh = sc->sc_ioh;
9363a1bedeaSderaadt uint8_t reg = sc->uguru_sensors[n].reg;
9373a1bedeaSderaadt uint8_t idx, data[3];
9383a1bedeaSderaadt uint8_t val = 0x00;
9393a1bedeaSderaadt int count, ret = 0;
9403a1bedeaSderaadt
9413a1bedeaSderaadt if (sensor->type == SENSOR_FANRPM)
9423a1bedeaSderaadt idx = UGURU_FAN_DATA;
9433a1bedeaSderaadt else
9443a1bedeaSderaadt idx = UGURU_ITM_DATA;
9453a1bedeaSderaadt
9463a1bedeaSderaadt /* sensor value */
9473a1bedeaSderaadt if (uguru_write_multi(iot, ioh, idx, ®, sizeof(reg)) ||
9483a1bedeaSderaadt uguru_read_multi(iot, ioh, &val, sizeof(val)))
9493a1bedeaSderaadt ++ret;
9503a1bedeaSderaadt
9513a1bedeaSderaadt /* sensor status */
9523a1bedeaSderaadt bzero(&data, sizeof(data));
9533a1bedeaSderaadt count = sensor->type == SENSOR_FANRPM ? 2 : 3;
9543a1bedeaSderaadt
9553a1bedeaSderaadt if (uguru_write_multi(iot, ioh, idx + 1, ®, sizeof(reg)) ||
9563a1bedeaSderaadt uguru_read_multi(iot, ioh, &data, count))
9573a1bedeaSderaadt ++ret;
9583a1bedeaSderaadt
9593a1bedeaSderaadt /* fill in current sensor structure */
9603a1bedeaSderaadt sc->cs.reading = val;
9613a1bedeaSderaadt /* sc->cs.flags = data[0]; */
9623a1bedeaSderaadt sc->cs.lower = data[1];
9633a1bedeaSderaadt sc->cs.upper = data[2];
9643a1bedeaSderaadt
9653a1bedeaSderaadt DPRINTF(50, "0x%.2x: 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x\n",
9663a1bedeaSderaadt idx, reg, val, data[0], data[1], data[2]);
9673a1bedeaSderaadt
9683a1bedeaSderaadt return (ret);
9693a1bedeaSderaadt }
9703a1bedeaSderaadt
9713a1bedeaSderaadt int
uguru_ac5_read_sensor(struct uguru_softc * sc,int n)9723a1bedeaSderaadt uguru_ac5_read_sensor(struct uguru_softc *sc, int n)
9733a1bedeaSderaadt {
9743a1bedeaSderaadt uint16_t reg;
9753a1bedeaSderaadt uint8_t val = 0x00;
9763a1bedeaSderaadt int ret = 1;
9773a1bedeaSderaadt
9783a1bedeaSderaadt reg = sc->uguru_sensors[n].reg | 0x0880;
9793a1bedeaSderaadt if (uguru_ac5_read(sc->sc_iot, sc->sc_ioh, reg, &val, sizeof(val)))
9803a1bedeaSderaadt ++ret;
9813a1bedeaSderaadt
9823a1bedeaSderaadt sc->cs.reading = val;
9833a1bedeaSderaadt return (ret);
9843a1bedeaSderaadt }
9853a1bedeaSderaadt
9863a1bedeaSderaadt int
uguru_ac5_read(bus_space_tag_t iot,bus_space_handle_t ioh,uint16_t reg,void * data,int count)9873a1bedeaSderaadt uguru_ac5_read(bus_space_tag_t iot, bus_space_handle_t ioh,
9883a1bedeaSderaadt uint16_t reg, void *data, int count)
9893a1bedeaSderaadt {
9903a1bedeaSderaadt uint8_t buf[3];
9913a1bedeaSderaadt
9923a1bedeaSderaadt buf[0] = reg >> 8;
9933a1bedeaSderaadt buf[1] = reg & 0xff;
9943a1bedeaSderaadt buf[2] = count;
9953a1bedeaSderaadt
9963a1bedeaSderaadt if (!uguru_write_multi(iot, ioh, 0x1a, &buf, sizeof(buf)) &&
9973a1bedeaSderaadt !uguru_read_multi(iot, ioh, data, count))
9983a1bedeaSderaadt return 0;
9993a1bedeaSderaadt
10003a1bedeaSderaadt DPRINTF(0, "uguru_ac5_read: timeout 0x%.2x 0x%.2x 0x%.2x\n",
10013a1bedeaSderaadt buf[0], buf[1], buf[2]);
10023a1bedeaSderaadt
10033a1bedeaSderaadt return 1;
10043a1bedeaSderaadt }
10053a1bedeaSderaadt
10063a1bedeaSderaadt int
uguru_write_multi(bus_space_tag_t iot,bus_space_handle_t ioh,uint8_t idx,void * data,int count)10073a1bedeaSderaadt uguru_write_multi(bus_space_tag_t iot, bus_space_handle_t ioh,
10083a1bedeaSderaadt uint8_t idx, void *data, int count)
10093a1bedeaSderaadt {
10103a1bedeaSderaadt uint8_t *inbuf = data;
10113a1bedeaSderaadt int i, ntries;
10123a1bedeaSderaadt
10133a1bedeaSderaadt UGURU_WRITE(iot, ioh, UGURU_INDEX, idx);
10143a1bedeaSderaadt
10153a1bedeaSderaadt for (i = 0; i < count; ++i) {
10163a1bedeaSderaadt /*
10173a1bedeaSderaadt * wait for non-busy status before write
10183a1bedeaSderaadt * to the data port.
10193a1bedeaSderaadt */
10203a1bedeaSderaadt ntries = 0;
10213a1bedeaSderaadt while (UGURU_READ(iot, ioh, UGURU_INDEX) >> 1 & 1) {
10226b5470fdSderaadt if (++ntries > 65)
10233a1bedeaSderaadt goto timeout;
10243a1bedeaSderaadt DELAY(5);
10253a1bedeaSderaadt }
10265365d42fSderaadt /* dummy read to flush the internal buffer */
10275365d42fSderaadt if (i == 0)
10285365d42fSderaadt UGURU_READ(iot, ioh, UGURU_DATA);
10295365d42fSderaadt
10303a1bedeaSderaadt UGURU_WRITE(iot, ioh, UGURU_DATA, *inbuf++);
10313a1bedeaSderaadt }
10323a1bedeaSderaadt return 0;
10333a1bedeaSderaadt
10343a1bedeaSderaadt timeout:
10353a1bedeaSderaadt DPRINTF(0, "uguru_write_multi: timeout 0x%.2x\n", idx);
10363a1bedeaSderaadt return 1;
10373a1bedeaSderaadt }
10383a1bedeaSderaadt
10393a1bedeaSderaadt int
uguru_read_multi(bus_space_tag_t iot,bus_space_handle_t ioh,void * data,int count)10403a1bedeaSderaadt uguru_read_multi(bus_space_tag_t iot, bus_space_handle_t ioh,
10413a1bedeaSderaadt void *data, int count)
10423a1bedeaSderaadt {
10433a1bedeaSderaadt uint8_t *outbuf = data;
10443a1bedeaSderaadt int i, ntries;
10453a1bedeaSderaadt
10463a1bedeaSderaadt for (i = 0; i < count; ++i) {
10473a1bedeaSderaadt /*
10483a1bedeaSderaadt * wait for valid status before read
10493a1bedeaSderaadt * from the data port.
10503a1bedeaSderaadt */
10513a1bedeaSderaadt ntries = 0;
10523a1bedeaSderaadt while (!(UGURU_READ(iot, ioh, UGURU_INDEX) & 1)) {
10533a1bedeaSderaadt if (++ntries > 40) {
10543a1bedeaSderaadt DPRINTF(0, "uguru_read_multi: timeout\n");
10553a1bedeaSderaadt return 1;
10563a1bedeaSderaadt }
10573a1bedeaSderaadt DELAY(35);
10583a1bedeaSderaadt }
10593a1bedeaSderaadt *outbuf++ = UGURU_READ(iot, ioh, UGURU_DATA);
10603a1bedeaSderaadt }
10613a1bedeaSderaadt return 0;
10623a1bedeaSderaadt }
1063