Module Name:    src
Committed By:   martin
Date:           Wed Jul 17 15:43:18 UTC 2019

Modified Files:
        src/sys/dev/ic [netbsd-8]: nslm7x.c
        src/sys/dev/isa [netbsd-8]: wbsio.c wbsioreg.h

Log Message:
Pull up following revision(s) (requested by msaitoh in ticket #1294):

        sys/dev/isa/wbsio.c: revision 1.25
        sys/dev/ic/nslm7x.c: revision 1.72
        sys/dev/ic/nslm7x.c: revision 1.73
        sys/dev/isa/wbsioreg.h: revision 1.9

 Use pmf_device_{register,deregister}().

 -

 Identify Nuvoton NCT6798D correctly. It seems that the bit width of NCT6796D
and newer devices' device ID is 13bit. The previous series was 12bits.


To generate a diff of this commit:
cvs rdiff -u -r1.64.10.2 -r1.64.10.3 src/sys/dev/ic/nslm7x.c
cvs rdiff -u -r1.10.10.5 -r1.10.10.6 src/sys/dev/isa/wbsio.c
cvs rdiff -u -r1.5.2.4 -r1.5.2.5 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.10.2 src/sys/dev/ic/nslm7x.c:1.64.10.3
--- src/sys/dev/ic/nslm7x.c:1.64.10.2	Thu Jul 26 20:37:42 2018
+++ src/sys/dev/ic/nslm7x.c	Wed Jul 17 15:43:18 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nslm7x.c,v 1.64.10.2 2018/07/26 20:37:42 snj Exp $ */
+/*	$NetBSD: nslm7x.c,v 1.64.10.3 2019/07/17 15:43:18 martin 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.10.2 2018/07/26 20:37:42 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nslm7x.c,v 1.64.10.3 2019/07/17 15:43:18 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2156,6 +2156,7 @@ static const struct wb_product wbsio_pro
     { WBSIO_ID_NCT6793D,    "NCT6793D", nct6779d_sensors, NULL },
     { WBSIO_ID_NCT6795D,    "NCT6795D", nct6779d_sensors, NULL },
     { WBSIO_ID_NCT6796D,    "NCT6796D", nct6779d_sensors, NULL },
+    { WBSIO_ID_NCT6798D,    "NCT6798D", nct6779d_sensors, NULL },
     { 0, NULL, NULL, NULL }
 };
 
@@ -2270,6 +2271,9 @@ lm_attach(struct lm_softc *lmsc)
 		    "unable to register with sysmon\n");
 		sysmon_envsys_destroy(lmsc->sc_sme);
 	}
+	if (!pmf_device_register(lmsc->sc_dev, NULL, NULL))
+		aprint_error_dev(lmsc->sc_dev,
+		    "couldn't establish power handler\n");
 }
 
 /*
@@ -2282,6 +2286,7 @@ lm_detach(struct lm_softc *lmsc)
 	callout_halt(&lmsc->sc_callout, NULL);
 	callout_destroy(&lmsc->sc_callout);
 	sysmon_envsys_unregister(lmsc->sc_sme);
+	pmf_device_deregister(lmsc->sc_dev);
 }
 
 static void

Index: src/sys/dev/isa/wbsio.c
diff -u src/sys/dev/isa/wbsio.c:1.10.10.5 src/sys/dev/isa/wbsio.c:1.10.10.6
--- src/sys/dev/isa/wbsio.c:1.10.10.5	Thu Jul 26 20:37:42 2018
+++ src/sys/dev/isa/wbsio.c	Wed Jul 17 15:43:18 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: wbsio.c,v 1.10.10.5 2018/07/26 20:37:42 snj Exp $	*/
+/*	$NetBSD: wbsio.c,v 1.10.10.6 2019/07/17 15:43:18 martin Exp $	*/
 /*	$OpenBSD: wbsio.c,v 1.10 2015/03/14 03:38:47 jsg Exp $	*/
 /*
  * Copyright (c) 2008 Mark Kettenis <kette...@openbsd.org>
@@ -73,31 +73,32 @@ struct wbsio_softc {
 
 static const struct wbsio_product {
 	uint16_t id;
-	bool	idis12bits;
+	int idbits;
 	const char *str;
 } wbsio_products[] = {
-	{ WBSIO_ID_W83627HF,	false,	"W83627HF" },
-	{ WBSIO_ID_W83697HF,	false,	"W83697HF" },
-	{ WBSIO_ID_W83637HF,	false,	"W83637HF" },
-	{ WBSIO_ID_W83627THF,	false,	"W83627THF" },
-	{ WBSIO_ID_W83687THF,	false,	"W83687THF" },
-	{ WBSIO_ID_W83627DHG,	true,	"W83627DHG" },
-	{ WBSIO_ID_W83627DHGP,	true,	"W83627DHG-P" },
-	{ WBSIO_ID_W83627EHF,	true,	"W83627EHF" },
-	{ WBSIO_ID_W83627SF,	true,	"W83627SF" },
-	{ WBSIO_ID_W83627UHG,	true,	"W83627UHG" },
-	{ WBSIO_ID_W83667HG,	true,	"W83667HG" },
-	{ WBSIO_ID_W83667HGB,	true,	"W83667HGB" },
-	{ WBSIO_ID_W83697UG,	true,	"W83697UG" },
-	{ WBSIO_ID_NCT6775F,	true,	"NCT6775F" },
-	{ WBSIO_ID_NCT6776F,	true,	"NCT6776F" },
-	{ WBSIO_ID_NCT5104D,	true,	"NCT5104D or 610[246]D" },
-	{ WBSIO_ID_NCT6779D,	true,	"NCT6779D" },
-	{ WBSIO_ID_NCT6791D,	true,	"NCT6791D" },
-	{ WBSIO_ID_NCT6792D,	true,	"NCT6792D" },
-	{ WBSIO_ID_NCT6793D,	true,	"NCT6793D" },
-	{ WBSIO_ID_NCT6795D,	true,	"NCT6795D" },
-	{ WBSIO_ID_NCT6796D,	true,	"NCT6796D" },
+	{ WBSIO_ID_W83627HF,	8,	"W83627HF" },
+	{ WBSIO_ID_W83697HF,	8,	"W83697HF" },
+	{ WBSIO_ID_W83637HF,	8,	"W83637HF" },
+	{ WBSIO_ID_W83627THF,	8,	"W83627THF" },
+	{ WBSIO_ID_W83687THF,	8,	"W83687THF" },
+	{ WBSIO_ID_W83627DHG,	12,	"W83627DHG" },
+	{ WBSIO_ID_W83627DHGP,	12,	"W83627DHG-P" },
+	{ WBSIO_ID_W83627EHF,	12,	"W83627EHF" },
+	{ WBSIO_ID_W83627SF,	12,	"W83627SF" },
+	{ WBSIO_ID_W83627UHG,	12,	"W83627UHG" },
+	{ WBSIO_ID_W83667HG,	12,	"W83667HG" },
+	{ WBSIO_ID_W83667HGB,	12,	"W83667HGB" },
+	{ WBSIO_ID_W83697UG,	12,	"W83697UG" },
+	{ WBSIO_ID_NCT6775F,	12,	"NCT6775F" },
+	{ WBSIO_ID_NCT6776F,	12,	"NCT6776F" },
+	{ WBSIO_ID_NCT5104D,	12,	"NCT5104D or 610[246]D" },
+	{ WBSIO_ID_NCT6779D,	12,	"NCT6779D" },
+	{ WBSIO_ID_NCT6791D,	12,	"NCT6791D" },
+	{ WBSIO_ID_NCT6792D,	12,	"NCT6792D" },
+	{ WBSIO_ID_NCT6793D,	12,	"NCT6793D" },
+	{ WBSIO_ID_NCT6795D,	12,	"NCT6795D" },
+	{ WBSIO_ID_NCT6796D,	13,	"NCT6796D" },
+	{ WBSIO_ID_NCT6798D,	13,	"NCT6798D" },
 };
 
 static const struct wbsio_product *wbsio_lookup(uint8_t id, uint8_t rev);
@@ -169,16 +170,19 @@ wbsio_conf_write(bus_space_tag_t iot, bu
 static const struct wbsio_product *
 wbsio_lookup(uint8_t id, uint8_t rev)
 {
-	uint16_t wid = ((uint16_t)id << 4) | (rev >> 4);
 	int i;
 
 	for (i = 0; i < __arraycount(wbsio_products); i++) {
-		if (wbsio_products[i].idis12bits) {
-			if (wbsio_products[i].id == wid)
-				return &wbsio_products[i];
-		} else {
-			if (wbsio_products[i].id == id)
-				return &wbsio_products[i];
+		const struct wbsio_product *ent = &wbsio_products[i];
+		switch (ent->idbits) {
+		case 13:
+		case 12:
+		case 8:
+			if (ent->id == WBSIO_MAKEID(id, rev, ent->idbits))
+				return ent;
+			break;
+		default:
+			break;
 		}
 	}
 
@@ -266,8 +270,7 @@ wbsio_attach(device_t parent, device_t s
 		aprint_error_dev(self, "Unknown device. Failed to attach\n");
 		return;
 	}
-	if (product->idis12bits)
-		rev &= 0x0f; /* Revision is low 4bits */
+	rev = WBSIO_MAKEREV(rev, product->idbits);
 
 	desc = product->str;
 	if (desc[0] == 'W')
@@ -276,8 +279,8 @@ wbsio_attach(device_t parent, device_t s
 		vendor = "Nuvoton";
 	aprint_naive("\n");
 	aprint_normal(": %s LPC Super I/O %s rev ", vendor, desc);
-	if (product->idis12bits) {
-		/* Revision filed is 4bit only */
+	if (product->idbits >= 12) {
+		/* Revision filed is 4 or 3bits */
 		aprint_normal("%c\n", 'A' + rev);
 	} else
 		aprint_normal("0x%02x\n", rev);
@@ -394,8 +397,7 @@ wbsio_search(device_t parent, cfdata_t c
 		aprint_error_dev(parent, "%s: Unknown device.\n", __func__);
 		return -1;
 	}
-	if (product->idis12bits)
-		devid = (devid << 4) | (rev >> 4);
+	devid = WBSIO_MAKEID(devid, rev, product->idbits);
 
 	sc->sc_ia.ia_nio = 1;
 	sc->sc_ia.ia_io = &sc->sc_io;

Index: src/sys/dev/isa/wbsioreg.h
diff -u src/sys/dev/isa/wbsioreg.h:1.5.2.4 src/sys/dev/isa/wbsioreg.h:1.5.2.5
--- src/sys/dev/isa/wbsioreg.h:1.5.2.4	Thu Jul 26 20:37:42 2018
+++ src/sys/dev/isa/wbsioreg.h	Wed Jul 17 15:43:18 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: wbsioreg.h,v 1.5.2.4 2018/07/26 20:37:42 snj Exp $ */
+/* $NetBSD: wbsioreg.h,v 1.5.2.5 2019/07/17 15:43:18 martin Exp $ */
 
 /* $OpenBSD: wbsioreg.h,v 1.4 2015/01/02 23:02:54 chris Exp $ */
 /*
@@ -48,12 +48,12 @@
 #define WBSIO_SFR		0x2F	/* Strapping Function Result */
 
 
-#define WBSIO_ID_W83627HF	0x52
+#define WBSIO_ID_W83627HF	0x52	/* 8bits */
 #define WBSIO_ID_W83697HF	0x60
 #define WBSIO_ID_W83637HF	0x70
 #define WBSIO_ID_W83627THF	0x82
 #define WBSIO_ID_W83687THF	0x85
-#define WBSIO_ID_W83627SF	0x595
+#define WBSIO_ID_W83627SF	0x595	/* 12bits */
 #define WBSIO_ID_W83697UG	0x681
 #define WBSIO_ID_W83627EHF_A	0x885
 #define WBSIO_ID_W83627EHF	0x886
@@ -70,7 +70,17 @@
 #define WBSIO_ID_NCT6792D	0xc91
 #define WBSIO_ID_NCT6793D	0xd12
 #define WBSIO_ID_NCT6795D	0xd35
-#define WBSIO_ID_NCT6796D	0xd42
+#define WBSIO_ID_NCT6796D	0xd420	/* 13bits */
+#define WBSIO_ID_NCT6798D	0xd428
+
+/* Make the above WBSIO_ID_* vaue from WBSIO_ID, WBSIO_REV and IDbits */
+#define WBSIO_MAKEID(id, rev, bits)					\
+	(((bits) == 13) ? (((uint16_t)(id) << 8) | ((rev) & 0xf8)) :	\
+	    ((bits) == 12) ? (((uint16_t)(id) << 4) | ((rev) >> 4)) : (id))
+
+#define WBSIO_MAKEREV(rev, bits)					     \
+	(((bits) == 13) ? ((rev) & 0x07) : ((bits) == 12) ? ((rev) & 0x0f) : \
+	    (rev))
 
 /* Strapping Function Result */
 #define WBSIO_SFR_24M48M	0x01

Reply via email to