summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsaitoh <msaitoh@NetBSD.org>2017-07-11 10:10:51 +0000
committermsaitoh <msaitoh@NetBSD.org>2017-07-11 10:10:51 +0000
commit4a6ec8da65c00a400e6456b0e8f37b80b22bf710 (patch)
tree95468e5772031851a7b455598a5c60a0683e10d1
parent2b15f85ef632c56df7f20a13126b07848d2758b5 (diff)
lm(4): Add suport for NCT5174D, NCT6775F, NCT6779D and NCT679[1235]D.
wbsio(4): Add support for NCT6795D.
-rw-r--r--sys/dev/ic/nslm7x.c280
-rw-r--r--sys/dev/ic/nslm7xvar.h7
-rw-r--r--sys/dev/isa/wbsio.c34
-rw-r--r--sys/dev/isa/wbsioreg.h14
4 files changed, 302 insertions, 33 deletions
diff --git a/sys/dev/ic/nslm7x.c b/sys/dev/ic/nslm7x.c
index 920f79e4473..b5cdb0e0a93 100644
--- a/sys/dev/ic/nslm7x.c
+++ b/sys/dev/ic/nslm7x.c
@@ -1,4 +1,4 @@
-/* $NetBSD: nslm7x.c,v 1.64 2016/06/01 08:06:38 pgoyette Exp $ */
+/* $NetBSD: nslm7x.c,v 1.65 2017/07/11 10:10:51 msaitoh Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nslm7x.c,v 1.64 2016/06/01 08:06:38 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nslm7x.c,v 1.65 2017/07/11 10:10:51 msaitoh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -45,6 +45,7 @@ __KERNEL_RCSID(0, "$NetBSD: nslm7x.c,v 1.64 2016/06/01 08:06:38 pgoyette Exp $")
#include <dev/isa/isareg.h>
#include <dev/isa/isavar.h>
+#include <dev/isa/wbsioreg.h>
#include <dev/sysmon/sysmonvar.h>
@@ -93,6 +94,8 @@ static void wb_refresh_temp(struct lm_softc *, int);
static void wb_refresh_fanrpm(struct lm_softc *, int);
static void wb_w83792d_refresh_fanrpm(struct lm_softc *, int);
static void wb_nct6776f_refresh_fanrpm(struct lm_softc *, int);
+static const char * wm_nct67xx_id2str(uint8_t);
+
static void as_refresh_temp(struct lm_softc *, int);
struct lm_chip {
@@ -105,6 +108,20 @@ static struct lm_chip lm_chips[] = {
{ def_match } /* Must be last */
};
+static struct {
+ uint8_t id;
+ const char *str;
+} nct_chips[] = {
+ {WBSIO_ID_NCT6775F, "NCT6775F"},
+ {WBSIO_ID_NCT6776F, "NCT6776F"},
+ {WBSIO_ID_NCT5104D, "NCT5104D or 610[246]D"},
+ {WBSIO_ID_NCT6779D, "NCT6779D"},
+ {WBSIO_ID_NCT6791D, "NCT6791D"},
+ {WBSIO_ID_NCT6792D, "NCT6792D"},
+ {WBSIO_ID_NCT6793D, "NCT6793D"},
+ {WBSIO_ID_NCT6795D, "NCT6795D"},
+};
+
/* LM78/78J/79/81 */
static struct lm_sensor lm78_sensors[] = {
/* Voltage */
@@ -1619,7 +1636,7 @@ static struct lm_sensor as99127f_sensors[] = {
{ .desc = NULL }
};
-/* NCT6776F */
+/* NCT6776F */
static struct lm_sensor nct6776f_sensors[] = {
/* Voltage */
{
@@ -1767,6 +1784,225 @@ static struct lm_sensor nct6776f_sensors[] = {
{ .desc = NULL }
};
+/* NCT6779D */
+static struct lm_sensor nct6779d_sensors[] = {
+ /* Voltage */
+ {
+ .desc = "VCore",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x80,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT_NONE / 2
+ },
+ {
+ .desc = "VIN1",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x81,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT(56, 10) / 2
+ },
+ {
+ .desc = "AVCC",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x82,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT(34, 34) / 2
+ },
+ {
+ .desc = "+3.3V",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x83,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT(34, 34) / 2
+ },
+ {
+ .desc = "VIN0",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x84,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT(48600, 10000)
+ },
+ {
+ .desc = "VIN8",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x85,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT_NONE / 2
+ },
+ {
+ .desc = "VIN4",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x86,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT_NONE
+ },
+ {
+ .desc = "+3.3VSB",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x87,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT(34, 34) / 2
+ },
+ {
+ .desc = "VBAT",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x88,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT_NONE
+ },
+ {
+ .desc = "VTT",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x89,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT_NONE
+ },
+ {
+ .desc = "VIN5",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x8a,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT_NONE
+ },
+ {
+ .desc = "VIN6",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x8b,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT_NONE
+ },
+ {
+ .desc = "VIN2",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x8c,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT_NONE
+ },
+ {
+ .desc = "VIN3",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x8d,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT(14414, 10000)
+ },
+ {
+ .desc = "VIN7",
+ .type = ENVSYS_SVOLTS_DC,
+ .bank = 4,
+ .reg = 0x8e,
+ .refresh = lm_refresh_volt,
+ .rfact = RFACT_NONE / 2
+ },
+
+ /* Temperature */
+ {
+ .desc = "MB Temperature",
+ .type = ENVSYS_STEMP,
+ .bank = 4,
+ .reg = 0x90,
+ .refresh = lm_refresh_temp,
+ .rfact = 0
+ },
+ {
+ .desc = "CPU Temperature",
+ .type = ENVSYS_STEMP,
+ .bank = 4,
+ .reg = 0x91,
+ .refresh = wb_refresh_temp,
+ .rfact = 0
+ },
+ {
+ .desc = "Aux Temp0",
+ .type = ENVSYS_STEMP,
+ .bank = 4,
+ .reg = 0x92,
+ .refresh = wb_refresh_temp,
+ .rfact = 0
+ },
+ {
+ .desc = "Aux Temp1",
+ .type = ENVSYS_STEMP,
+ .bank = 4,
+ .reg = 0x93,
+ .refresh = wb_refresh_temp,
+ .rfact = 0
+ },
+ {
+ .desc = "Aux Temp2",
+ .type = ENVSYS_STEMP,
+ .bank = 4,
+ .reg = 0x94,
+ .refresh = wb_refresh_temp,
+ .rfact = 0
+ },
+ {
+ .desc = "Aux Temp3",
+ .type = ENVSYS_STEMP,
+ .bank = 4,
+ .reg = 0x95,
+ .refresh = wb_refresh_temp,
+ .rfact = 0
+ },
+
+ /* Fans */
+ {
+ .desc = "System Fan",
+ .type = ENVSYS_SFANRPM,
+ .bank = 4,
+ .reg = 0xb0,
+ .refresh = wb_nct6776f_refresh_fanrpm,
+ .rfact = 0
+ },
+ {
+ .desc = "CPU Fan",
+ .type = ENVSYS_SFANRPM,
+ .bank = 4,
+ .reg = 0xb2,
+ .refresh = wb_nct6776f_refresh_fanrpm,
+ .rfact = 0
+ },
+ {
+ .desc = "Aux Fan0",
+ .type = ENVSYS_SFANRPM,
+ .bank = 4,
+ .reg = 0xb4,
+ .refresh = wb_nct6776f_refresh_fanrpm,
+ .rfact = 0
+ },
+ {
+ .desc = "Aux Fan1",
+ .type = ENVSYS_SFANRPM,
+ .bank = 4,
+ .reg = 0xb6,
+ .refresh = wb_nct6776f_refresh_fanrpm,
+ .rfact = 0
+ },
+ {
+ .desc = "Aux Fan2",
+ .type = ENVSYS_SFANRPM,
+ .bank = 4,
+ .reg = 0xb8,
+ .refresh = wb_nct6776f_refresh_fanrpm,
+ .rfact = 0
+ },
+
+ { .desc = NULL }
+};
+
static void
lm_generic_banksel(struct lm_softc *lmsc, int bank)
{
@@ -2015,13 +2251,31 @@ wb_match(struct lm_softc *sc)
wb_temp_diode_type(sc, cf_flags);
break;
case WB_CHIPID_W83627DHG:
- if (sc->sioid == WBSIO_ID_NCT6776F) {
+ model = wm_nct67xx_id2str(sc->sioid);
+ if (model != NULL) {
vendor = "Nuvoton";
- model = "NCT6776F";
- lm_setup_sensors(sc, nct6776f_sensors);
+ switch (sc->sioid) {
+ case WBSIO_ID_NCT6775F:
+ case WBSIO_ID_NCT6776F:
+ case WBSIO_ID_NCT5104D:
+ lm_setup_sensors(sc, nct6776f_sensors);
+ break;
+ case WBSIO_ID_NCT6779D:
+ case WBSIO_ID_NCT6791D:
+ case WBSIO_ID_NCT6792D:
+ case WBSIO_ID_NCT6793D:
+ case WBSIO_ID_NCT6795D:
+ lm_setup_sensors(sc, nct6779d_sensors);
+ break;
+ default:
+ panic("%s: unknown id (%02x)", __func__,
+ sc->sioid);
+ break;
+ }
} else {
model = "W83627DHG";
lm_setup_sensors(sc, w83627dhg_sensors);
+ break;
}
wb_temp_diode_type(sc, cf_flags);
break;
@@ -2364,6 +2618,20 @@ wb_nct6776f_refresh_fanrpm(struct lm_softc *sc, int n)
}
}
+static const char *
+wm_nct67xx_id2str(uint8_t id)
+{
+ int i;
+
+ for (i = 0; i < __arraycount(nct_chips); i++) {
+ if (nct_chips[i].id == id)
+ return nct_chips[i].str;
+ }
+
+ /* Not Found */
+ return NULL;
+}
+
static void
wb_w83792d_refresh_fanrpm(struct lm_softc *sc, int n)
{
diff --git a/sys/dev/ic/nslm7xvar.h b/sys/dev/ic/nslm7xvar.h
index 5087426f1c0..759c80a3aef 100644
--- a/sys/dev/ic/nslm7xvar.h
+++ b/sys/dev/ic/nslm7xvar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: nslm7xvar.h,v 1.29 2016/06/01 02:37:47 pgoyette Exp $ */
+/* $NetBSD: nslm7xvar.h,v 1.30 2017/07/11 10:10:51 msaitoh Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -144,9 +144,6 @@
#define WB_CHIPID_W83627EHF 0xa1
#define WB_CHIPID_W83627DHG 0xc1
-/* wbsio Device IDs */
-#define WBSIO_ID_NCT6776F 0xc3
-
/* Config bits */
#define WB_CONFIG_VMR9 0x01
@@ -154,7 +151,7 @@
#define WB_VREF 3600
#define WB_W83627EHF_VREF 2048
-#define WB_MAX_SENSORS 19
+#define WB_MAX_SENSORS 36
struct lm_softc {
device_t sc_dev;
diff --git a/sys/dev/isa/wbsio.c b/sys/dev/isa/wbsio.c
index e7e3d14aa8c..df00548c2c5 100644
--- a/sys/dev/isa/wbsio.c
+++ b/sys/dev/isa/wbsio.c
@@ -1,4 +1,4 @@
-/* $NetBSD: wbsio.c,v 1.11 2017/07/07 08:42:15 msaitoh Exp $ */
+/* $NetBSD: wbsio.c,v 1.12 2017/07/11 10:10:51 msaitoh Exp $ */
/* $OpenBSD: wbsio.c,v 1.10 2015/03/14 03:38:47 jsg Exp $ */
/*
* Copyright (c) 2008 Mark Kettenis <kettenis@openbsd.org>
@@ -126,11 +126,11 @@ wbsio_probe(device_t parent, cfdata_t match, void *aux)
case WBSIO_ID_W83697HF:
case WBSIO_ID_W83697UG:
case WBSIO_ID_NCT5104D:
- case WBSIO_ID_NCT6775:
+ case WBSIO_ID_NCT6775F:
case WBSIO_ID_NCT6776F:
- case WBSIO_ID_NCT6779:
- case WBSIO_ID_NCT6791:
- case WBSIO_ID_NCT6792:
+ case WBSIO_ID_NCT6779D:
+ case WBSIO_ID_NCT6791D:
+ case WBSIO_ID_NCT6792D:
ia->ia_nio = 1;
ia->ia_io[0].ir_size = WBSIO_IOSIZE;
ia->ia_niomem = 0;
@@ -212,29 +212,33 @@ wbsio_attach(device_t parent, device_t self, void *aux)
vendor = "Nuvoton";
printf("NCT5104D");
break;
- case WBSIO_ID_NCT6775:
+ case WBSIO_ID_NCT6775F:
vendor = "Nuvoton";
- desc = "NCT6775";
+ desc = "NCT6775F";
break;
case WBSIO_ID_NCT6776F:
vendor = "Nuvoton";
desc = "NCT6776F";
break;
- case WBSIO_ID_NCT6779:
+ case WBSIO_ID_NCT6779D:
vendor = "Nuvoton";
- desc = "NCT6779";
+ desc = "NCT6779D";
break;
- case WBSIO_ID_NCT6791:
+ case WBSIO_ID_NCT6791D:
vendor = "Nuvoton";
- desc = "NCT6791";
+ desc = "NCT6791D";
break;
- case WBSIO_ID_NCT6792:
+ case WBSIO_ID_NCT6792D:
vendor = "Nuvoton";
- desc = "NCT6792";
+ desc = "NCT6792D";
break;
- case WBSIO_ID_NCT6793:
+ case WBSIO_ID_NCT6793D:
vendor = "Nuvoton";
- desc = "NCT6793";
+ desc = "NCT6793D";
+ break;
+ case WBSIO_ID_NCT6795D:
+ vendor = "Nuvoton";
+ desc = "NCT6795D";
break;
}
/* Read device revision */
diff --git a/sys/dev/isa/wbsioreg.h b/sys/dev/isa/wbsioreg.h
index fab8bd5c5a4..69798346161 100644
--- a/sys/dev/isa/wbsioreg.h
+++ b/sys/dev/isa/wbsioreg.h
@@ -1,4 +1,3 @@
-/* $Id */
/* $OpenBSD: wbsioreg.h,v 1.4 2015/01/02 23:02:54 chris Exp $ */
/*
* Copyright (c) 2008 Mark Kettenis <kettenis@openbsd.org>
@@ -47,13 +46,14 @@
#define WBSIO_ID_W83667HG 0xa5
#define WBSIO_ID_W83627DHGP 0xb0
#define WBSIO_ID_W83667HGB 0xb3
-#define WBSIO_ID_NCT6775 0xb4
+#define WBSIO_ID_NCT6775F 0xb4
#define WBSIO_ID_NCT6776F 0xc3
-#define WBSIO_ID_NCT5104D 0xc4 /* XXX 6102 or 6106? */
-#define WBSIO_ID_NCT6779 0xc5
-#define WBSIO_ID_NCT6791 0xc8
-#define WBSIO_ID_NCT6792 0xc9
-#define WBSIO_ID_NCT6793 0xd1
+#define WBSIO_ID_NCT5104D 0xc4 /* 610[246]D */
+#define WBSIO_ID_NCT6779D 0xc5
+#define WBSIO_ID_NCT6791D 0xc8
+#define WBSIO_ID_NCT6792D 0xc9
+#define WBSIO_ID_NCT6793D 0xd1
+#define WBSIO_ID_NCT6795D 0xd3
/* Logical Device Number (LDN) Assignments */
#define WBSIO_LDN_HM 0x0b