Module Name:    src
Committed By:   msaitoh
Date:           Tue Jul 11 10:10:51 UTC 2017

Modified Files:
        src/sys/dev/ic: nslm7x.c nslm7xvar.h
        src/sys/dev/isa: wbsio.c wbsioreg.h

Log Message:
lm(4): Add suport for NCT5174D, NCT6775F, NCT6779D and NCT679[1235]D.
wbsio(4): Add support for NCT6795D.


To generate a diff of this commit:
cvs rdiff -u -r1.64 -r1.65 src/sys/dev/ic/nslm7x.c
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/ic/nslm7xvar.h
cvs rdiff -u -r1.11 -r1.12 src/sys/dev/isa/wbsio.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/isa/wbsioreg.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/ic/nslm7x.c
diff -u src/sys/dev/ic/nslm7x.c:1.64 src/sys/dev/ic/nslm7x.c:1.65
--- src/sys/dev/ic/nslm7x.c:1.64	Wed Jun  1 08:06:38 2016
+++ src/sys/dev/ic/nslm7x.c	Tue Jul 11 10:10:51 2017
@@ -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
 
 #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_so
 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_sof
 	}
 }
 
+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)
 {

Index: src/sys/dev/ic/nslm7xvar.h
diff -u src/sys/dev/ic/nslm7xvar.h:1.29 src/sys/dev/ic/nslm7xvar.h:1.30
--- src/sys/dev/ic/nslm7xvar.h:1.29	Wed Jun  1 02:37:47 2016
+++ src/sys/dev/ic/nslm7xvar.h	Tue Jul 11 10:10:51 2017
@@ -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;

Index: src/sys/dev/isa/wbsio.c
diff -u src/sys/dev/isa/wbsio.c:1.11 src/sys/dev/isa/wbsio.c:1.12
--- src/sys/dev/isa/wbsio.c:1.11	Fri Jul  7 08:42:15 2017
+++ src/sys/dev/isa/wbsio.c	Tue Jul 11 10:10:51 2017
@@ -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 <kette...@openbsd.org>
@@ -126,11 +126,11 @@ wbsio_probe(device_t parent, cfdata_t ma
 	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 s
 		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 */

Index: src/sys/dev/isa/wbsioreg.h
diff -u src/sys/dev/isa/wbsioreg.h:1.1 src/sys/dev/isa/wbsioreg.h:1.2
--- src/sys/dev/isa/wbsioreg.h:1.1	Fri Jul  7 08:42:15 2017
+++ src/sys/dev/isa/wbsioreg.h	Tue Jul 11 10:10:51 2017
@@ -1,4 +1,3 @@
-/* $Id */
 /* $OpenBSD: wbsioreg.h,v 1.4 2015/01/02 23:02:54 chris Exp $ */
 /*
  * Copyright (c) 2008 Mark Kettenis <kette...@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

Reply via email to