Module Name:    src
Committed By:   pgoyette
Date:           Thu Jul  8 23:27:17 UTC 2010

Modified Files:
        src/sys/dev/i2c: sdtemp.c sdtemp_reg.h

Log Message:
Add additional chip IDs, and be more specific about which revs we match.

>From Guenter Roeck on a Linux mailing list.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/i2c/sdtemp.c
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/i2c/sdtemp_reg.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/i2c/sdtemp.c
diff -u src/sys/dev/i2c/sdtemp.c:1.13 src/sys/dev/i2c/sdtemp.c:1.14
--- src/sys/dev/i2c/sdtemp.c:1.13	Sat Apr 10 19:02:39 2010
+++ src/sys/dev/i2c/sdtemp.c	Thu Jul  8 23:27:17 2010
@@ -1,4 +1,4 @@
-/*      $NetBSD: sdtemp.c,v 1.13 2010/04/10 19:02:39 pgoyette Exp $        */
+/*      $NetBSD: sdtemp.c,v 1.14 2010/07/08 23:27:17 pgoyette Exp $        */
 
 /*
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sdtemp.c,v 1.13 2010/04/10 19:02:39 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdtemp.c,v 1.14 2010/07/08 23:27:17 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -80,8 +80,8 @@
 
 struct sdtemp_dev_entry {
 	const uint16_t sdtemp_mfg_id;
-	const uint8_t  sdtemp_dev_id;
-	const uint8_t  sdtemp_rev_id;
+	const uint16_t  sdtemp_devrev;
+	const uint16_t  sdtemp_mask;
 	const uint8_t  sdtemp_resolution;
 	const char    *sdtemp_desc;
 };
@@ -100,36 +100,41 @@
  */
 static const struct sdtemp_dev_entry
 sdtemp_dev_table[] = {
-    { MAXIM_MANUFACTURER_ID, MAX_6604_DEVICE_ID,    0xff, 3,
+    { MAXIM_MANUFACTURER_ID, MAX_6604_DEVICE_ID,    MAX_6604_MASK,   3,
 	"Maxim MAX604" },
-    { MCP_MANUFACTURER_ID,   MCP_9805_DEVICE_ID,    0xff, 2,
-	"Microchip Tech MCP9805" },
-    { MCP_MANUFACTURER_ID,   MCP_98242_DEVICE_ID,   0xff, -4,
+    { MCP_MANUFACTURER_ID,   MCP_9805_DEVICE_ID,    MCP_9805_MASK,   2,
+	"Microchip Tech MCP9805/MCP9843" },
+    { MCP_MANUFACTURER_ID,   MCP_98243_DEVICE_ID,   MCP_98243_MASK, -4,
+	"Microchip Tech MCP98243" },
+    { MCP_MANUFACTURER_ID,   MCP_98242_DEVICE_ID,   MCP_98242_MASK, -4,
 	"Microchip Tech MCP98242" },
-    { ADT_MANUFACTURER_ID,   ADT_7408_DEVICE_ID,    0xff, 4,
+    { ADT_MANUFACTURER_ID,   ADT_7408_DEVICE_ID,    ADT_7408_MASK,   4,
 	"Analog Devices ADT7408" },
-    { NXP_MANUFACTURER_ID,   NXP_SE97_DEVICE_ID,    0xff, 3,
-	"NXP Semiconductors SE97/SE98" },
-    { STTS_MANUFACTURER_ID,  STTS_424E02_DEVICE_ID, 0x00, 2,
-	"STmicroelectronics STTS424E02-DA" }, 
-    { STTS_MANUFACTURER_ID,  STTS_424E02_DEVICE_ID, 0x01, 2,
-	"STmicroelectronics STTS424E02-DN" }, 
-    { CAT_MANUFACTURER_ID,   CAT_34TS02_DEVICE_ID,  0xff, 4,
+    { NXP_MANUFACTURER_ID,   NXP_SE98_DEVICE_ID,    NXP_SE98_MASK,   3,
+	"NXP Semiconductors SE97B/SE98" },
+    { NXP_MANUFACTURER_ID,   NXP_SE97_DEVICE_ID,    NXP_SE97_MASK,   3,
+	"NXP Semiconductors SE97" },
+    { STTS_MANUFACTURER_ID,  STTS_424E_DEVICE_ID,   STTS_424E_MASK,  2,
+	"STmicroelectronics STTS424E" }, 
+    { STTS_MANUFACTURER_ID,  STTS_424_DEVICE_ID,    STTS_424_MASK,   2,
+	"STmicroelectronics STTS424" }, 
+    { CAT_MANUFACTURER_ID,   CAT_34TS02_DEVICE_ID,  CAT_34TS02_MASK, 4,
 	"Catalyst CAT34TS02/CAT6095" },
     { 0, 0, 0, 2, "Unknown" }
 };
 
 static int
-sdtemp_lookup(uint16_t mfg, uint16_t dev, uint16_t rev)
+sdtemp_lookup(uint16_t mfg, uint16_t devrev)
 {
 	int i;
 
-	for (i = 0; sdtemp_dev_table[i].sdtemp_mfg_id; i++)
-		if (sdtemp_dev_table[i].sdtemp_mfg_id == mfg &&
-		    sdtemp_dev_table[i].sdtemp_dev_id == dev &&
-		    (sdtemp_dev_table[i].sdtemp_rev_id == 0xff ||
-		     sdtemp_dev_table[i].sdtemp_rev_id == rev))
+	for (i = 0; sdtemp_dev_table[i].sdtemp_mfg_id; i++) {
+		if (mfg != sdtemp_dev_table[i].sdtemp_mfg_id)
+			continue;
+		if ((devrev & sdtemp_dev_table[i].sdtemp_mask) ==
+		    sdtemp_dev_table[i].sdtemp_devrev)
 			break;
+	}
 
 	return i;
 }
@@ -157,7 +162,7 @@
 	if (error)
 		return 0;
 
-	i = sdtemp_lookup(mfgid, devid >> 8, devid & 0xff);
+	i = sdtemp_lookup(mfgid, devid);
 	if (sdtemp_dev_table[i].sdtemp_mfg_id == 0) {
 		aprint_debug("sdtemp: No match for mfg 0x%04x dev 0x%02x "
 		    "rev 0x%02x at address 0x%02x\n", mfgid, devid >> 8,
@@ -189,7 +194,7 @@
 		aprint_error(": attach error %d\n", error);
 		return;
 	}
-	i = sdtemp_lookup(mfgid, devid >> 8, devid & 0xff);
+	i = sdtemp_lookup(mfgid, devid);
 	sc->sc_resolution =
 	    sdtemp_dev_table[i].sdtemp_resolution;
 

Index: src/sys/dev/i2c/sdtemp_reg.h
diff -u src/sys/dev/i2c/sdtemp_reg.h:1.2 src/sys/dev/i2c/sdtemp_reg.h:1.3
--- src/sys/dev/i2c/sdtemp_reg.h:1.2	Sat Jun 13 19:02:33 2009
+++ src/sys/dev/i2c/sdtemp_reg.h	Thu Jul  8 23:27:17 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdtemp_reg.h,v 1.2 2009/06/13 19:02:33 pgoyette Exp $	*/
+/*	$NetBSD: sdtemp_reg.h,v 1.3 2010/07/08 23:27:17 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -92,26 +92,39 @@
  * Devices known to conform to JEDEC JC42.4
  */
 #define	MAXIM_MANUFACTURER_ID		0x004D
-#define	MAX_6604_DEVICE_ID		0x3E
+#define	MAX_6604_DEVICE_ID		0x3E00
+#define	MAX_6604_MASK			0xFFFF
 
 #define	MCP_MANUFACTURER_ID		0x0054
-#define	MCP_9805_DEVICE_ID		0x00
-#define	MCP_98242_DEVICE_ID		0x20
+#define	MCP_9805_DEVICE_ID		0x0000	/* Also matches MCP9843 */
+#define	MCP_9805_MASK			0xFFFE
+#define	MCP_98242_DEVICE_ID		0x2000
+#define	MCP_98242_MASK			0xFFFC
+#define	MCP_98243_DEVICE_ID		0x2100
+#define	MCP_98243_MASK			0xFFFC
 
 /* According to datasheets, SE97 and SE98 have same ID */
 
 #define	NXP_MANUFACTURER_ID		0x1131
-#define	NXP_SE97_DEVICE_ID		0xA1
+#define	NXP_SE98_DEVICE_ID		0xA100
+#define	NXP_SE98_MASK			0xFFFC
+#define	NXP_SE97_DEVICE_ID		0xA200
+#define	NXP_SE97_MASK			0xFFFC
 
 #define	ADT_MANUFACTURER_ID		0x11D4
-#define	ADT_7408_DEVICE_ID		0x80
+#define	ADT_7408_DEVICE_ID		0x8001
+#define	ADT_7408_MASK			0xFFFF
 
 #define	STTS_MANUFACTURER_ID		0x104A
-#define	STTS_424E02_DEVICE_ID		0x00
+#define	STTS_424_DEVICE_ID		0x0101
+#define	STTS_424_MASK			0xFFFF
+#define	STTS_424E_DEVICE_ID		0x0000
+#define	STTS_424E_MASK			0xFFFE
 
 /* According to datasheets, both the CAT6095 and CAT34TS02 have the same ID */
 
 #define	CAT_MANUFACTURER_ID		0x1B09
-#define	CAT_34TS02_DEVICE_ID		0x08
+#define	CAT_34TS02_DEVICE_ID		0x0800
+#define	CAT_34TS02_MASK			0xFFE0
 
 #endif	/* _DEV_I2C_SDTEMPREG_H */

Reply via email to