Module Name:    src
Committed By:   jmcneill
Date:           Sun Dec 13 17:15:06 UTC 2015

Modified Files:
        src/sys/dev/i2c: as3722.c at24cxx.c titemp.c

Log Message:
Support direct config.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/i2c/as3722.c
cvs rdiff -u -r1.20 -r1.21 src/sys/dev/i2c/at24cxx.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/i2c/titemp.c

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/as3722.c
diff -u src/sys/dev/i2c/as3722.c:1.3 src/sys/dev/i2c/as3722.c:1.4
--- src/sys/dev/i2c/as3722.c:1.3	Sat Nov 21 12:19:47 2015
+++ src/sys/dev/i2c/as3722.c	Sun Dec 13 17:15:06 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: as3722.c,v 1.3 2015/11/21 12:19:47 jmcneill Exp $ */
+/* $NetBSD: as3722.c,v 1.4 2015/12/13 17:15:06 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: as3722.c,v 1.3 2015/11/21 12:19:47 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: as3722.c,v 1.4 2015/12/13 17:15:06 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -93,6 +93,11 @@ static int	as3722_set_clear(struct as372
 CFATTACH_DECL_NEW(as3722pmic, sizeof(struct as3722_softc),
     as3722_match, as3722_attach, NULL, NULL);
 
+static const char * as3722_compats[] = {
+	"ams,as3722",
+	NULL
+};
+
 static int
 as3722_match(device_t parent, cfdata_t match, void *aux)
 {
@@ -100,16 +105,20 @@ as3722_match(device_t parent, cfdata_t m
 	uint8_t reg, id1;
 	int error;
 
-	iic_acquire_bus(ia->ia_tag, I2C_F_POLL);
-	reg = AS3722_ASIC_ID1_REG;
-	error = iic_exec(ia->ia_tag, I2C_OP_READ_WITH_STOP, ia->ia_addr,
-	    &reg, 1, &id1, 1, I2C_F_POLL);
-	iic_release_bus(ia->ia_tag, I2C_F_POLL);
-
-	if (error == 0 && id1 == 0x0c)
-		return 1;
-
-	return 0;
+	if (ia->ia_name == NULL) {
+		iic_acquire_bus(ia->ia_tag, I2C_F_POLL);
+		reg = AS3722_ASIC_ID1_REG;
+		error = iic_exec(ia->ia_tag, I2C_OP_READ_WITH_STOP, ia->ia_addr,
+		    &reg, 1, &id1, 1, I2C_F_POLL);
+		iic_release_bus(ia->ia_tag, I2C_F_POLL);
+
+		if (error == 0 && id1 == 0x0c)
+			return 1;
+
+		return 0;
+	} else {
+		return iic_compat_match(ia, as3722_compats);
+	}
 }
 
 static void

Index: src/sys/dev/i2c/at24cxx.c
diff -u src/sys/dev/i2c/at24cxx.c:1.20 src/sys/dev/i2c/at24cxx.c:1.21
--- src/sys/dev/i2c/at24cxx.c:1.20	Sun Sep 27 13:02:21 2015
+++ src/sys/dev/i2c/at24cxx.c	Sun Dec 13 17:15:06 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: at24cxx.c,v 1.20 2015/09/27 13:02:21 phx Exp $	*/
+/*	$NetBSD: at24cxx.c,v 1.21 2015/12/13 17:15:06 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: at24cxx.c,v 1.20 2015/09/27 13:02:21 phx Exp $");
+__KERNEL_RCSID(0, "$NetBSD: at24cxx.c,v 1.21 2015/12/13 17:15:06 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -113,9 +113,17 @@ static int seeprom_wait_idle(struct seep
 static const char * seeprom_compats[] = {
 	"i2c-at24c64",
 	"i2c-at34c02",
+	"atmel,24c02",
 	NULL
 };
 
+static const struct seeprom_size {
+	const char *name;
+	int size;
+} seeprom_sizes[] = {
+	{ "atmel,24c02", 256 },
+};
+
 static int
 seeprom_match(device_t parent, cfdata_t cf, void *aux)
 {
@@ -142,6 +150,7 @@ seeprom_attach(device_t parent, device_t
 {
 	struct seeprom_softc *sc = device_private(self);
 	struct i2c_attach_args *ia = aux;
+	u_int n;
 
 	sc->sc_tag = ia->ia_tag;
 	sc->sc_address = ia->ia_addr;
@@ -173,6 +182,16 @@ seeprom_attach(device_t parent, device_t
 		sc->sc_size = (device_cfdata(self)->cf_flags << 7);
 	else
 		sc->sc_size = ia->ia_size;
+
+	if (sc->sc_size == 0 && ia->ia_ncompat > 0) {
+		for (n = 0; n < __arraycount(seeprom_sizes); n++) {
+			if (!strcmp(seeprom_sizes[n].name, ia->ia_compat[n])) {
+				sc->sc_size = seeprom_sizes[n].size;
+				break;
+			}
+		}
+	}
+
 	switch (sc->sc_size) {
 	case 128:		/* 1Kbit */
 	case 256:		/* 2Kbit */

Index: src/sys/dev/i2c/titemp.c
diff -u src/sys/dev/i2c/titemp.c:1.1 src/sys/dev/i2c/titemp.c:1.2
--- src/sys/dev/i2c/titemp.c:1.1	Tue May 12 20:54:08 2015
+++ src/sys/dev/i2c/titemp.c	Sun Dec 13 17:15:06 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: titemp.c,v 1.1 2015/05/12 20:54:08 jmcneill Exp $ */
+/* $NetBSD: titemp.c,v 1.2 2015/12/13 17:15:06 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: titemp.c,v 1.1 2015/05/12 20:54:08 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: titemp.c,v 1.2 2015/12/13 17:15:06 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -84,6 +84,11 @@ static int	titemp_read(struct titemp_sof
 CFATTACH_DECL_NEW(titemp, sizeof(struct titemp_softc),
     titemp_match, titemp_attach, NULL, NULL);
 
+static const char * titemp_compats[] = {
+	"ti,tmp451",
+	NULL
+};
+
 static int
 titemp_match(device_t parent, cfdata_t match, void *aux)
 {
@@ -91,16 +96,20 @@ titemp_match(device_t parent, cfdata_t m
 	uint8_t mfid;
 	int error;
 
-	if (iic_acquire_bus(ia->ia_tag, I2C_F_POLL) != 0)
-		return 0;
-	error = iic_smbus_read_byte(ia->ia_tag, ia->ia_addr,
-	    TITEMP_MFID_REG, &mfid, I2C_F_POLL);
-	iic_release_bus(ia->ia_tag, I2C_F_POLL);
+	if (ia->ia_name == NULL) {
+		if (iic_acquire_bus(ia->ia_tag, I2C_F_POLL) != 0)
+			return 0;
+		error = iic_smbus_read_byte(ia->ia_tag, ia->ia_addr,
+		    TITEMP_MFID_REG, &mfid, I2C_F_POLL);
+		iic_release_bus(ia->ia_tag, I2C_F_POLL);
 
-	if (error || mfid != TITEMP_MFID_TMP451)
-		return 0;
+		if (error || mfid != TITEMP_MFID_TMP451)
+			return 0;
 
-	return 1;
+		return 1;
+	} else {
+		return iic_compat_match(ia, titemp_compats);
+	}
 }
 
 static void

Reply via email to