Module Name:    src
Committed By:   thorpej
Date:           Tue Jun 26 06:03:57 UTC 2018

Modified Files:
        src/sys/arch/macppc/dev: deq.c smusat.c
        src/sys/arch/sparc64/dev: pcf8591_envctrl.c
        src/sys/dev/i2c: adadc.c adm1021.c adm1026.c as3722.c at24cxx.c
            axp20x.c axp22x.c axppmic.c dbcool.c ds1307.c dstemp.c fcu.c
            ihidev.c lm75.c lm87.c max77620.c pcf8563.c sy8106a.c tcagpio.c
            tcakp.c titemp.c tsl256x.c
        src/sys/kern: subr_autoconf.c
        src/sys/sys: device.h

Log Message:
In my quest to make device_compatible_entry (and associated goo)
super-general, it turns out I also made it a little to cumbersome
to use (if my tired fingers are any indication).  So, this is a
course-correction -- one string per entry (like of_compat_data,
which it will soon replace), and remove the over-verbose macros.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/macppc/dev/deq.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/macppc/dev/smusat.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/sparc64/dev/pcf8591_envctrl.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/i2c/adadc.c src/sys/dev/i2c/axp22x.c \
    src/sys/dev/i2c/fcu.c src/sys/dev/i2c/max77620.c \
    src/sys/dev/i2c/tsl256x.c
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/i2c/adm1021.c
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/i2c/adm1026.c src/sys/dev/i2c/ihidev.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/i2c/as3722.c
cvs rdiff -u -r1.27 -r1.28 src/sys/dev/i2c/at24cxx.c
cvs rdiff -u -r1.12 -r1.13 src/sys/dev/i2c/axp20x.c
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/i2c/axppmic.c
cvs rdiff -u -r1.51 -r1.52 src/sys/dev/i2c/dbcool.c
cvs rdiff -u -r1.28 -r1.29 src/sys/dev/i2c/ds1307.c
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/i2c/dstemp.c src/sys/dev/i2c/sy8106a.c \
    src/sys/dev/i2c/tcagpio.c
cvs rdiff -u -r1.32 -r1.33 src/sys/dev/i2c/lm75.c
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/i2c/lm87.c
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/i2c/pcf8563.c
cvs rdiff -u -r1.8 -r1.9 src/sys/dev/i2c/tcakp.c
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/i2c/titemp.c
cvs rdiff -u -r1.261 -r1.262 src/sys/kern/subr_autoconf.c
cvs rdiff -u -r1.154 -r1.155 src/sys/sys/device.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/arch/macppc/dev/deq.c
diff -u src/sys/arch/macppc/dev/deq.c:1.15 src/sys/arch/macppc/dev/deq.c:1.16
--- src/sys/arch/macppc/dev/deq.c:1.15	Mon Jun 18 17:07:07 2018
+++ src/sys/arch/macppc/dev/deq.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: deq.c,v 1.15 2018/06/18 17:07:07 thorpej Exp $	*/
+/*	$NetBSD: deq.c,v 1.16 2018/06/26 06:03:57 thorpej Exp $	*/
 
 /*-
  * Copyright (C) 2005 Michael Lorenz
@@ -32,7 +32,7 @@
  */
  
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: deq.c,v 1.15 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: deq.c,v 1.16 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -52,18 +52,13 @@ static int deq_match(device_t, struct cf
 CFATTACH_DECL_NEW(deq, sizeof(struct deq_softc),
     deq_match, deq_attach, NULL, NULL);
 
-static const char * deq_compats[] = {
-	"deq",
-	"tas3004",
-	"pcm3052",
-	"cs8416",
-	"codec",
-	NULL
-};
-
-static const struct device_compatible_entry deq_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(deq_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "deq",		0 },
+	{ "tas3004",		0 },
+	{ "pcm3052",		0 },
+	{ "cs8416",		0 },
+	{ "codec",		0 },
+	{ NULL,			0 }
 };
 
 int
@@ -72,7 +67,7 @@ deq_match(device_t parent, struct cfdata
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, cf, deq_compat_data, &match_result))
+	if (iic_use_direct_match(ia, cf, compat_data, &match_result))
 		return match_result;
 
 	/* This driver is direct-config only. */

Index: src/sys/arch/macppc/dev/smusat.c
diff -u src/sys/arch/macppc/dev/smusat.c:1.5 src/sys/arch/macppc/dev/smusat.c:1.6
--- src/sys/arch/macppc/dev/smusat.c:1.5	Mon Jun 18 17:07:07 2018
+++ src/sys/arch/macppc/dev/smusat.c	Tue Jun 26 06:03:57 2018
@@ -105,15 +105,10 @@ static int smusat_sysctl_sensor_value(SY
 CFATTACH_DECL_NEW(smusat, sizeof(struct smusat_softc),
     smusat_match, smusat_attach, NULL, NULL);
 
-static const char * smusat_compats[] = {
-	"sat",	
-	"smu-sat",
-	NULL
-};
-
-static const struct device_compatible_entry smusat_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(smusat_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "sat",		0 },
+	{ "smu-sat",		0 },
+	{ NULL,			0 }
 };
 
 static int
@@ -122,7 +117,7 @@ smusat_match(device_t parent, struct cfd
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, cf, smusat_compat_data, &match_result))
+	if (iic_use_direct_match(ia, cf, compat_data, &match_result))
 		return match_result;
 
 	if (ia->ia_addr == 0x58)

Index: src/sys/arch/sparc64/dev/pcf8591_envctrl.c
diff -u src/sys/arch/sparc64/dev/pcf8591_envctrl.c:1.8 src/sys/arch/sparc64/dev/pcf8591_envctrl.c:1.9
--- src/sys/arch/sparc64/dev/pcf8591_envctrl.c:1.8	Mon Jun 18 17:07:07 2018
+++ src/sys/arch/sparc64/dev/pcf8591_envctrl.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: pcf8591_envctrl.c,v 1.8 2018/06/18 17:07:07 thorpej Exp $	*/
+/*	$NetBSD: pcf8591_envctrl.c,v 1.9 2018/06/26 06:03:57 thorpej Exp $	*/
 /*	$OpenBSD: pcf8591_envctrl.c,v 1.6 2007/10/25 21:17:20 kettenis Exp $ */
 
 /*
@@ -19,7 +19,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pcf8591_envctrl.c,v 1.8 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pcf8591_envctrl.c,v 1.9 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -69,14 +69,9 @@ static void	ecadc_get_limits(struct sysm
 CFATTACH_DECL_NEW(ecadc, sizeof(struct ecadc_softc),
 	ecadc_match, ecadc_attach, NULL, NULL);
 
-static const char * ecadc_compats[] = {
-	"ecadc",
-	NULL
-};
-
-static const struct device_compatible_entry ecadc_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(ecadc_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "ecadc",		0 },
+	{ NULL,			0 }
 };
 
 static int
@@ -85,7 +80,7 @@ ecadc_match(device_t parent, cfdata_t cf
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, cf, ecadc_compat_data, &match_result))
+	if (iic_use_direct_match(ia, cf, compat_data, &match_result))
 		return match_result;
 
 	/* This driver is direct-config only. */

Index: src/sys/dev/i2c/adadc.c
diff -u src/sys/dev/i2c/adadc.c:1.5 src/sys/dev/i2c/adadc.c:1.6
--- src/sys/dev/i2c/adadc.c:1.5	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/adadc.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: adadc.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: adadc.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2018 Michael Lorenz
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: adadc.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: adadc.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -93,14 +93,9 @@ static void	adadc_sensors_refresh(struct
 CFATTACH_DECL_NEW(adadc, sizeof(struct adadc_softc),
     adadc_match, adadc_attach, NULL, NULL);
 
-static const char * adadc_compats[] = {
-	"ad7417",
-	NULL
-};
-
-static const struct device_compatible_entry adadc_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(adadc_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "ad7417",		0 },
+	{ NULL,			0 }
 };
 
 /* calibaration table from Darwin via Linux */
@@ -112,7 +107,7 @@ adadc_match(device_t parent, cfdata_t ma
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, adadc_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 
 	/*
Index: src/sys/dev/i2c/axp22x.c
diff -u src/sys/dev/i2c/axp22x.c:1.5 src/sys/dev/i2c/axp22x.c:1.6
--- src/sys/dev/i2c/axp22x.c:1.5	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/axp22x.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: axp22x.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: axp22x.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: axp22x.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: axp22x.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -40,14 +40,9 @@ __KERNEL_RCSID(0, "$NetBSD: axp22x.c,v 1
 
 #include <dev/sysmon/sysmonvar.h>
 
-static const char *compatible[] = {
-	"x-powers,axp221",
-	NULL
-};
-
-static const struct device_compatible_entry axp22x_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(compatible),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "x-powers,axp221",		0 },
+	{ NULL,				0 }
 };
 
 #define AXP_TEMP_MON_REG	0x56	/* 2 bytes */
@@ -76,7 +71,7 @@ axp22x_match(device_t parent, cfdata_t m
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, axp22x_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 
 	/* This device is direct-config only. */
Index: src/sys/dev/i2c/fcu.c
diff -u src/sys/dev/i2c/fcu.c:1.5 src/sys/dev/i2c/fcu.c:1.6
--- src/sys/dev/i2c/fcu.c:1.5	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/fcu.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: fcu.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: fcu.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2018 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fcu.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fcu.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -115,14 +115,9 @@ static void fcu_adjust(void *);
 CFATTACH_DECL_NEW(fcu, sizeof(struct fcu_softc),
     fcu_match, fcu_attach, NULL, NULL);
 
-static const char * fcu_compats[] = {
-	"fcu",
-	NULL
-};
-
-static const struct device_compatible_entry fcu_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(fcu_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "fcu",			0 },
+	{ NULL,				0 }
 };
 
 static int
@@ -131,7 +126,7 @@ fcu_match(device_t parent, cfdata_t matc
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, fcu_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 	
 	if (ia->ia_addr == 0x2f)
Index: src/sys/dev/i2c/max77620.c
diff -u src/sys/dev/i2c/max77620.c:1.5 src/sys/dev/i2c/max77620.c:1.6
--- src/sys/dev/i2c/max77620.c:1.5	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/max77620.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: max77620.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: max77620.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: max77620.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: max77620.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -66,14 +66,9 @@ struct max77620_pin {
 	bool			pin_actlo;
 };
 
-static const char * max77620_compats[] = {
-	"maxim,max77620",
-	NULL
-};
-
-static const struct device_compatible_entry max77620_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(max77620_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "maxim,max77620",		0 },
+	{ NULL,				0 }
 };
 
 static uint8_t
@@ -265,8 +260,7 @@ max77620_match(device_t parent, cfdata_t
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, max77620_compat_data,
-				 &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 
 	return 0;
Index: src/sys/dev/i2c/tsl256x.c
diff -u src/sys/dev/i2c/tsl256x.c:1.5 src/sys/dev/i2c/tsl256x.c:1.6
--- src/sys/dev/i2c/tsl256x.c:1.5	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/tsl256x.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: tsl256x.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: tsl256x.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2018 Jason R. Thorpe
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tsl256x.c,v 1.5 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tsl256x.c,v 1.6 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -78,15 +78,10 @@ static void	tsllux_attach(device_t, devi
 CFATTACH_DECL_NEW(tsllux, sizeof(struct tsllux_softc),
     tsllux_match, tsllux_attach, NULL, NULL);
 
-static const char *tsllux_compats[] = {
-	"amstaos,tsl2560",
-	"amstaos,tsl2561",
-	NULL
-};
-
 static const struct device_compatible_entry tsllux_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(tsllux_compats),
-	DEVICE_COMPAT_TERMINATOR
+	{ "amstaos,tsl2560",		0 },
+	{ "amstaos,tsl2561",		0 },
+	{ NULL,				0 }
 };
 
 static int	tsllux_read1(struct tsllux_softc *, uint8_t, uint8_t *);

Index: src/sys/dev/i2c/adm1021.c
diff -u src/sys/dev/i2c/adm1021.c:1.18 src/sys/dev/i2c/adm1021.c:1.19
--- src/sys/dev/i2c/adm1021.c:1.18	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/adm1021.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: adm1021.c,v 1.18 2018/06/18 17:07:07 thorpej Exp $ */
+/*	$NetBSD: adm1021.c,v 1.19 2018/06/26 06:03:57 thorpej Exp $ */
 /*	$OpenBSD: adm1021.c,v 1.27 2007/06/24 05:34:35 dlg Exp $	*/
 
 /*
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: adm1021.c,v 1.18 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: adm1021.c,v 1.19 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -151,16 +151,11 @@ CFATTACH_DECL_NEW(admtemp, sizeof(struct
 	admtemp_match, admtemp_attach, NULL, NULL);
 
 /* XXX: add flags for compats to admtemp_setflags() */
-static const char * admtemp_compats[] = {
-	"i2c-max1617",
-	"max6642",
-	"max6690",
-	NULL
-};
-
-static const struct device_compatible_entry admtemp_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(admtemp_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "i2c-max1617",		0 },
+	{ "max6642",			0 },
+	{ "max6690",			0 },
+	{ NULL,				0 }
 };
 
 int
@@ -169,7 +164,7 @@ admtemp_match(device_t parent, cfdata_t 
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, admtemp_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 	
 	/*

Index: src/sys/dev/i2c/adm1026.c
diff -u src/sys/dev/i2c/adm1026.c:1.4 src/sys/dev/i2c/adm1026.c:1.5
--- src/sys/dev/i2c/adm1026.c:1.4	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/adm1026.c	Tue Jun 26 06:03:57 2018
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: adm1026.c,v 1.4 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: adm1026.c,v 1.5 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -122,14 +122,9 @@ static int adm1026_write_reg(struct adm1
 CFATTACH_DECL_NEW(adm1026hm, sizeof(struct adm1026_softc),
 	adm1026_match, adm1026_attach, adm1026_detach, NULL);
 
-static const char * adm1026_compats[] = {
-	"i2c-adm1026",
-	NULL
-};
-
-static const struct device_compatible_entry adm1026_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(adm1026_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "i2c-adm1026",		0 },
+	{ NULL,				0 }
 };
 
 static int
@@ -143,7 +138,7 @@ adm1026_match(device_t parent, cfdata_t 
 	sc.sc_address = ia->ia_addr;
 	sc.sc_iic_flags = 0;
 
-	if (iic_use_direct_match(ia, cf, adm1026_compat_data, &match_result))
+	if (iic_use_direct_match(ia, cf, compat_data, &match_result))
 		return match_result;
 
 	if ((ia->ia_addr & ADM1026_ADDRMASK) == ADM1026_ADDR &&
Index: src/sys/dev/i2c/ihidev.c
diff -u src/sys/dev/i2c/ihidev.c:1.4 src/sys/dev/i2c/ihidev.c:1.5
--- src/sys/dev/i2c/ihidev.c:1.4	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/ihidev.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ihidev.c,v 1.4 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: ihidev.c,v 1.5 2018/06/26 06:03:57 thorpej Exp $ */
 /* $OpenBSD ihidev.c,v 1.13 2017/04/08 02:57:23 deraadt Exp $ */
 
 /*-
@@ -54,7 +54,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ihidev.c,v 1.4 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ihidev.c,v 1.5 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -120,14 +120,9 @@ static int	ihidev_maxrepid(void *, int);
 static int	ihidev_print(void *, const char *);
 static int	ihidev_submatch(device_t, cfdata_t, const int *, void *);
 
-static const char *ihidev_compats[] = {
-	"hid-over-i2c",
-	NULL
-};
-
-static const struct device_compatible_entry ihidev_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(ihidev_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "hid-over-i2c",		0 },
+	{ NULL,				0 }
 };
 
 static int
@@ -136,7 +131,7 @@ ihidev_match(device_t parent, cfdata_t m
 	struct i2c_attach_args * const ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, ihidev_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return I2C_MATCH_DIRECT_COMPATIBLE;
 
 	return 0;

Index: src/sys/dev/i2c/as3722.c
diff -u src/sys/dev/i2c/as3722.c:1.14 src/sys/dev/i2c/as3722.c:1.15
--- src/sys/dev/i2c/as3722.c:1.14	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/as3722.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: as3722.c,v 1.14 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: as3722.c,v 1.15 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -29,7 +29,7 @@
 #include "opt_fdt.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: as3722.c,v 1.14 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: as3722.c,v 1.15 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -222,14 +222,9 @@ CFATTACH_DECL_NEW(as3722reg, sizeof(stru
     as3722reg_match, as3722reg_attach, NULL, NULL);
 #endif
 
-static const char * as3722_compats[] = {
-	"ams,as3722",
-	NULL
-};
-
-static const struct device_compatible_entry as3722_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(as3722_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "ams,as3722",			0 },
+	{ NULL,				0 }
 };
 
 static int
@@ -239,7 +234,7 @@ as3722_match(device_t parent, cfdata_t m
 	uint8_t reg, id1;
 	int error, match_result;
 
-	if (iic_use_direct_match(ia, match, as3722_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 	
 	if (ia->ia_addr != AS3722_I2C_ADDR)

Index: src/sys/dev/i2c/at24cxx.c
diff -u src/sys/dev/i2c/at24cxx.c:1.27 src/sys/dev/i2c/at24cxx.c:1.28
--- src/sys/dev/i2c/at24cxx.c:1.27	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/at24cxx.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: at24cxx.c,v 1.27 2018/06/18 17:07:07 thorpej Exp $	*/
+/*	$NetBSD: at24cxx.c,v 1.28 2018/06/26 06:03:57 thorpej Exp $	*/
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: at24cxx.c,v 1.27 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: at24cxx.c,v 1.28 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -111,14 +111,6 @@ const struct cdevsw seeprom_cdevsw = {
 
 static int seeprom_wait_idle(struct seeprom_softc *);
 
-static const char * seeprom_compats[] = {
-	"i2c-at24c64",
-	"i2c-at34c02",
-	"atmel,24c02",
-	"atmel,24c16",
-	NULL
-};
-
 static const struct seeprom_size {
 	const char *name;
 	int size;
@@ -127,9 +119,13 @@ static const struct seeprom_size {
 	{ "atmel,24c16", 2048 },
 };
 
-static const struct device_compatible_entry seeprom_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(seeprom_compats),
-	DEVICE_COMPAT_TERMINATOR
+/* XXXJRT collapse seeprom_size stuff into compat_data; see also ofw code  */
+static const struct device_compatible_entry compat_data[] = {
+	{ "i2c-at24c64",		0 },
+	{ "i2c-at34c02",		0 },
+	{ "atmel,24c02",		0 },
+	{ "atmel,24c16",		0 },
+	{ NULL,				0 }
 };
 
 static int
@@ -138,7 +134,7 @@ seeprom_match(device_t parent, cfdata_t 
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, cf, seeprom_compat_data, &match_result))
+	if (iic_use_direct_match(ia, cf, compat_data, &match_result))
 		return match_result;
 
 	if ((ia->ia_addr & AT24CXX_ADDRMASK) == AT24CXX_ADDR)

Index: src/sys/dev/i2c/axp20x.c
diff -u src/sys/dev/i2c/axp20x.c:1.12 src/sys/dev/i2c/axp20x.c:1.13
--- src/sys/dev/i2c/axp20x.c:1.12	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/axp20x.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: axp20x.c,v 1.12 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: axp20x.c,v 1.13 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2014-2017 Jared McNeill <jmcne...@invisible.ca>
@@ -29,7 +29,7 @@
 #include "opt_fdt.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: axp20x.c,v 1.12 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: axp20x.c,v 1.13 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -214,14 +214,9 @@ static void	axp20x_fdt_attach(struct axp
 CFATTACH_DECL_NEW(axp20x, sizeof(struct axp20x_softc),
     axp20x_match, axp20x_attach, NULL, NULL);
 
-static const char * compatible[] = {
-	"x-powers,axp209",
-	NULL
-};
-
-static const struct device_compatible_entry axp20x_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(compatible),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "x-powers,axp209",		0 },
+	{ NULL,				0 }
 };
 
 static int
@@ -230,7 +225,7 @@ axp20x_match(device_t parent, cfdata_t m
 	struct i2c_attach_args * const ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, axp20x_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 
 	/* This device is direct-config only. */

Index: src/sys/dev/i2c/axppmic.c
diff -u src/sys/dev/i2c/axppmic.c:1.13 src/sys/dev/i2c/axppmic.c:1.14
--- src/sys/dev/i2c/axppmic.c:1.13	Tue Jun 26 04:32:35 2018
+++ src/sys/dev/i2c/axppmic.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: axppmic.c,v 1.13 2018/06/26 04:32:35 thorpej Exp $ */
+/* $NetBSD: axppmic.c,v 1.14 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2014-2018 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: axppmic.c,v 1.13 2018/06/26 04:32:35 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: axppmic.c,v 1.14 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -264,7 +264,6 @@ struct axpreg_attach_args {
 	i2c_addr_t	reg_addr;
 };
 
-static const char *axp803_compatstrings[] = { "x-powers,axp803", NULL };
 static const struct axppmic_config axp803_config = {
 	.name = "AXP803",
 	.controls = axp803_ctrls,
@@ -283,8 +282,6 @@ static const struct axppmic_config axp80
 	.chargestirq = AXPPMIC_IRQ(4, __BITS(1,0)),	
 };
 
-static const char *axp805_compatstrings[] = { "x-powers,axp805",
-					      "x-powers,axp806", NULL };
 static const struct axppmic_config axp805_config = {
 	.name = "AXP805/806",
 	.controls = axp805_ctrls,
@@ -293,10 +290,11 @@ static const struct axppmic_config axp80
 	.poklirq = AXPPMIC_IRQ(2, __BIT(0)),
 };
 
-static const struct device_compatible_entry axppmic_compat_data[] = {
-	DEVICE_COMPAT_ENTRY_WITH_DATA(axp803_compatstrings, &axp803_config),
-	DEVICE_COMPAT_ENTRY_WITH_DATA(axp805_compatstrings, &axp805_config),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "x-powers,axp803",		(uintptr_t)&axp803_config },
+	{ "x-powers,axp805",		(uintptr_t)&axp805_config },
+	{ "x-powers,axp806",		(uintptr_t)&axp805_config },
+	{ NULL,				0 }
 };
 
 static int
@@ -682,7 +680,7 @@ axppmic_match(device_t parent, cfdata_t 
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, axppmic_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 
 	/* This device is direct-config only. */
@@ -702,9 +700,9 @@ axppmic_attach(device_t parent, device_t
 	uint32_t irq_mask;
 	void *ih;
 
-	(void) iic_compatible_match(ia, axppmic_compat_data, &dce);
+	(void) iic_compatible_match(ia, compat_data, &dce);
 	KASSERT(dce != NULL);
-	c = DEVICE_COMPAT_ENTRY_GET_PTR(dce);
+	c = (void *)dce->data;
 
 	sc->sc_dev = self;
 	sc->sc_i2c = ia->ia_tag;

Index: src/sys/dev/i2c/dbcool.c
diff -u src/sys/dev/i2c/dbcool.c:1.51 src/sys/dev/i2c/dbcool.c:1.52
--- src/sys/dev/i2c/dbcool.c:1.51	Fri Jun 22 15:48:57 2018
+++ src/sys/dev/i2c/dbcool.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: dbcool.c,v 1.51 2018/06/22 15:48:57 martin Exp $ */
+/*	$NetBSD: dbcool.c,v 1.52 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -50,7 +50,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dbcool.c,v 1.51 2018/06/22 15:48:57 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dbcool.c,v 1.52 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -731,17 +731,12 @@ static char dbcool_cur_behav[16];
 CFATTACH_DECL_NEW(dbcool, sizeof(struct dbcool_softc),
     dbcool_match, dbcool_attach, dbcool_detach, NULL);
 
-static const char * dbcool_compats[] = {
-	"i2c-adm1031",
-	"adt7467",
-	"adt7460",
-	"adm1030",
-	NULL
-};
-
-static const struct device_compatible_entry dbcool_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(dbcool_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "i2c-adm1031",		0 },
+	{ "adt7467",			0 },
+	{ "adt7460",			0 },
+	{ "adm1030",			0 },
+	{ NULL,				0 }
 };
 
 int
@@ -756,7 +751,7 @@ dbcool_match(device_t parent, cfdata_t c
 	dc.dc_writereg = dbcool_writereg;
 	int match_result;
 
-	if (iic_use_direct_match(ia, cf, dbcool_compat_data, &match_result))
+	if (iic_use_direct_match(ia, cf, compat_data, &match_result))
 		return match_result;
 
 	if ((ia->ia_addr & DBCOOL_ADDRMASK) != DBCOOL_ADDR)

Index: src/sys/dev/i2c/ds1307.c
diff -u src/sys/dev/i2c/ds1307.c:1.28 src/sys/dev/i2c/ds1307.c:1.29
--- src/sys/dev/i2c/ds1307.c:1.28	Tue Jun 26 04:32:35 2018
+++ src/sys/dev/i2c/ds1307.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: ds1307.c,v 1.28 2018/06/26 04:32:35 thorpej Exp $	*/
+/*	$NetBSD: ds1307.c,v 1.29 2018/06/26 06:03:57 thorpej Exp $	*/
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ds1307.c,v 1.28 2018/06/26 04:32:35 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ds1307.c,v 1.29 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -75,7 +75,6 @@ struct dsrtc_model {
 #define	DSRTC_FLAG_CLOCK_HOLD_REVERSED	0x20
 };
 
-static const char *ds1307_compats[] = { "dallas,ds1307", "maxim,ds1307", NULL };
 static const i2c_addr_t ds1307_valid_addrs[] = { DS1307_ADDR, 0 };
 static const struct dsrtc_model ds1307_model = {
 	.dm_valid_addrs = ds1307_valid_addrs,
@@ -89,7 +88,6 @@ static const struct dsrtc_model ds1307_m
 	.dm_flags = DSRTC_FLAG_BCD | DSRTC_FLAG_CLOCK_HOLD,
 };
 
-static const char *ds1339_compats[] = { "dallas,ds1339", "maxim,ds1339", NULL };
 static const struct dsrtc_model ds1339_model = {
 	.dm_valid_addrs = ds1307_valid_addrs,
 	.dm_model = 1339,
@@ -98,7 +96,6 @@ static const struct dsrtc_model ds1339_m
 	.dm_flags = DSRTC_FLAG_BCD,
 };
 
-static const char *ds1340_compats[] = { "dallas,ds1340", "maxim,ds1340", NULL };
 static const struct dsrtc_model ds1340_model = {
 	.dm_valid_addrs = ds1307_valid_addrs,
 	.dm_model = 1340,
@@ -109,7 +106,6 @@ static const struct dsrtc_model ds1340_m
 	.dm_flags = DSRTC_FLAG_BCD,
 };
 
-static const char *ds1672_compats[] = { "dallas,ds1672", "maxim,ds1672", NULL };
 static const struct dsrtc_model ds1672_model = {
 	.dm_valid_addrs = ds1307_valid_addrs,
 	.dm_model = 1672,
@@ -120,7 +116,6 @@ static const struct dsrtc_model ds1672_m
 	.dm_flags = 0,
 };
 
-static const char *ds3231_compats[] = { "dallas,ds3231", "maxim,ds3231", NULL };
 static const struct dsrtc_model ds3231_model = {
 	.dm_valid_addrs = ds1307_valid_addrs,
 	.dm_model = 3231,
@@ -129,7 +124,6 @@ static const struct dsrtc_model ds3231_m
 	.dm_flags = DSRTC_FLAG_BCD | DSRTC_FLAG_TEMP,
 };
 
-static const char *ds3232_compats[] = { "dallas,ds3232", "maxim,ds3232", NULL };
 static const struct dsrtc_model ds3232_model = {
 	.dm_valid_addrs = ds1307_valid_addrs,
 	.dm_model = 3232,
@@ -145,8 +139,6 @@ static const struct dsrtc_model ds3232_m
 	.dm_flags = DSRTC_FLAG_BCD,
 };
 
-				/* XXX vendor prefix */
-static const char *mcp7940_compats[] = { "microchip,mcp7940", NULL };
 static const i2c_addr_t mcp7940_valid_addrs[] = { MCP7940_ADDR, 0 };
 static const struct dsrtc_model mcp7940_model = {
 	.dm_valid_addrs = mcp7940_valid_addrs,
@@ -163,15 +155,28 @@ static const struct dsrtc_model mcp7940_
 		DSRTC_FLAG_VBATEN | DSRTC_FLAG_CLOCK_HOLD_REVERSED,
 };
 
-static const struct device_compatible_entry dsrtc_compat_data[] = {
-	DEVICE_COMPAT_ENTRY_WITH_DATA(ds1307_compats,  &ds1307_model),
-	DEVICE_COMPAT_ENTRY_WITH_DATA(ds1339_compats,  &ds1339_model),
-	DEVICE_COMPAT_ENTRY_WITH_DATA(ds1340_compats,  &ds1340_model),
-	DEVICE_COMPAT_ENTRY_WITH_DATA(ds1672_compats,  &ds1672_model),
-	DEVICE_COMPAT_ENTRY_WITH_DATA(ds3231_compats,  &ds3231_model),
-	DEVICE_COMPAT_ENTRY_WITH_DATA(ds3232_compats,  &ds3232_model),
-	DEVICE_COMPAT_ENTRY_WITH_DATA(mcp7940_compats, &mcp7940_model),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "dallas,ds1307",		(uintptr_t)&ds1307_model },
+	{ "maxim,ds1307",		(uintptr_t)&ds1307_model },
+
+	{ "dallas,ds1339",		(uintptr_t)&ds1339_model },
+	{ "maxim,ds1339",		(uintptr_t)&ds1339_model },
+
+	{ "dallas,ds1340",		(uintptr_t)&ds1340_model },
+	{ "maxim,ds1340",		(uintptr_t)&ds1340_model },
+
+	{ "dallas,ds1672",		(uintptr_t)&ds1672_model },
+	{ "maxim,ds1672",		(uintptr_t)&ds1672_model },
+
+	{ "dallas,ds3231",		(uintptr_t)&ds3231_model },
+	{ "maxim,ds3231",		(uintptr_t)&ds3231_model },
+
+	{ "dallas,ds3232",		(uintptr_t)&ds3232_model },
+	{ "maxim,ds3232",		(uintptr_t)&ds3232_model },
+
+	{ "microchip,mcp7940",		(uintptr_t)&mcp7940_model },
+
+	{ NULL,				0 }
 };
 
 struct dsrtc_softc {
@@ -234,9 +239,8 @@ dsrtc_model_by_number(u_int model)
 	if (model == 0)
 		return &ds1307_model;
 
-	for (dce = dsrtc_compat_data;
-	     DEVICE_COMPAT_ENTRY_IS_TERMINATOR(dce) == false; dce++) {
-		dm = DEVICE_COMPAT_ENTRY_GET_PTR(dce);
+	for (dce = compat_data; dce->compat != NULL; dce++) {
+		dm = (void *)dce->data;
 		if (dm->dm_model == model)
 			return dm;
 	}
@@ -249,8 +253,8 @@ dsrtc_model_by_compat(const struct i2c_a
 	const struct dsrtc_model *dm = NULL;
 	const struct device_compatible_entry *dce;
 
-	if (iic_compatible_match(ia, dsrtc_compat_data, &dce))
-		dm = DEVICE_COMPAT_ENTRY_GET_PTR(dce);
+	if (iic_compatible_match(ia, compat_data, &dce))
+		dm = (void *)dce->data;
 
 	return dm;
 }
@@ -273,7 +277,7 @@ dsrtc_match(device_t parent, cfdata_t cf
 	const struct dsrtc_model *dm;
 	int match_result;
 
-	if (iic_use_direct_match(ia, cf, dsrtc_compat_data, &match_result))
+	if (iic_use_direct_match(ia, cf, compat_data, &match_result))
 		return match_result;
 
 	dm = dsrtc_model_by_number(cf->cf_flags & 0xffff);

Index: src/sys/dev/i2c/dstemp.c
diff -u src/sys/dev/i2c/dstemp.c:1.3 src/sys/dev/i2c/dstemp.c:1.4
--- src/sys/dev/i2c/dstemp.c:1.3	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/dstemp.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: dstemp.c,v 1.3 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: dstemp.c,v 1.4 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2018 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dstemp.c,v 1.3 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dstemp.c,v 1.4 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -72,14 +72,9 @@ static void	dstemp_sensors_refresh(struc
 CFATTACH_DECL_NEW(dstemp, sizeof(struct dstemp_softc),
     dstemp_match, dstemp_attach, NULL, NULL);
 
-static const char * dstemp_compats[] = {
-	"ds1631",
-	NULL
-};
-
-static const struct device_compatible_entry dstemp_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(dstemp_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "ds1631",			0 },
+	{ NULL,				0 }
 };
 
 static int
@@ -88,7 +83,7 @@ dstemp_match(device_t parent, cfdata_t m
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, dstemp_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 	
 	if ((ia->ia_addr & 0xf8) == 0x48)
Index: src/sys/dev/i2c/sy8106a.c
diff -u src/sys/dev/i2c/sy8106a.c:1.3 src/sys/dev/i2c/sy8106a.c:1.4
--- src/sys/dev/i2c/sy8106a.c:1.3	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/sy8106a.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: sy8106a.c,v 1.3 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: sy8106a.c,v 1.4 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sy8106a.c,v 1.3 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sy8106a.c,v 1.4 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -59,14 +59,9 @@ struct sy8106a_softc {
 	u_int		sc_ramp_delay;
 };
 
-static const char * compatible[] = {
-	"silergy,sy8106a",
-	NULL
-};
-
-static const struct device_compatible_entry sy8106a_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(compatible),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "silergy,sy8106a",		0 },
+	{ NULL,				0 }
 };
 
 static uint8_t
@@ -192,7 +187,7 @@ sy8106a_match(device_t parent, cfdata_t 
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, sy8106a_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 	
 	return 0;
Index: src/sys/dev/i2c/tcagpio.c
diff -u src/sys/dev/i2c/tcagpio.c:1.3 src/sys/dev/i2c/tcagpio.c:1.4
--- src/sys/dev/i2c/tcagpio.c:1.3	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/tcagpio.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: tcagpio.c,v 1.3 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: tcagpio.c,v 1.4 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcagpio.c,v 1.3 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcagpio.c,v 1.4 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -68,14 +68,9 @@ struct tcagpio_pin {
 	bool			pin_actlo;
 };
 
-static const char * compatible[] = {
-	"ti,tca9539",
-	NULL
-};
-
-static const struct device_compatible_entry tcagpio_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(compatible),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "ti,tca9539",			0 },
+	{ NULL,				0 }
 };
 
 static uint8_t
@@ -253,7 +248,7 @@ tcagpio_match(device_t parent, cfdata_t 
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, tcagpio_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 
 	return 0;

Index: src/sys/dev/i2c/lm75.c
diff -u src/sys/dev/i2c/lm75.c:1.32 src/sys/dev/i2c/lm75.c:1.33
--- src/sys/dev/i2c/lm75.c:1.32	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/lm75.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: lm75.c,v 1.32 2018/06/18 17:07:07 thorpej Exp $	*/
+/*	$NetBSD: lm75.c,v 1.33 2018/06/26 06:03:57 thorpej Exp $	*/
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lm75.c,v 1.32 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lm75.c,v 1.33 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -101,19 +101,14 @@ static void	lmtemp_setlim_lm77(struct sy
 static void	lmtemp_setup_sysctl(struct lmtemp_softc *);
 static int	sysctl_lm75_temp(SYSCTLFN_ARGS);
 
-static const char * lmtemp_compats[] = {
-	"i2c-lm75",
-	"ds1775",
+static const struct device_compatible_entry compat_data[] = {
+	{ "i2c-lm75",			0 },
+	{ "ds1775",			0 },
 	/*
 	 * see XXX in _attach() below: add code once non-lm75 matches are
 	 * added here!
 	 */
-	NULL
-};
-
-static const struct device_compatible_entry lmtemp_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(lmtemp_compats),
-	DEVICE_COMPAT_TERMINATOR
+	{ NULL,				0 }
 };
 
 enum {
@@ -153,7 +148,7 @@ lmtemp_match(device_t parent, cfdata_t c
 	struct i2c_attach_args *ia = aux;
 	int i, match_result;
 
-	if (iic_use_direct_match(ia, cf, lmtemp_compat_data, &match_result))
+	if (iic_use_direct_match(ia, cf, compat_data, &match_result))
 		return match_result;
 
 	/*

Index: src/sys/dev/i2c/lm87.c
diff -u src/sys/dev/i2c/lm87.c:1.9 src/sys/dev/i2c/lm87.c:1.10
--- src/sys/dev/i2c/lm87.c:1.9	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/lm87.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: lm87.c,v 1.9 2018/06/18 17:07:07 thorpej Exp $	*/
+/*	$NetBSD: lm87.c,v 1.10 2018/06/26 06:03:57 thorpej Exp $	*/
 /*	$OpenBSD: lm87.c,v 1.20 2008/11/10 05:19:48 cnst Exp $	*/
 
 /*
@@ -18,7 +18,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lm87.c,v 1.9 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lm87.c,v 1.10 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -135,18 +135,13 @@ void	lmenv_refresh(struct sysmon_envsys 
 CFATTACH_DECL_NEW(lmenv, sizeof(struct lmenv_softc),
 	lmenv_match, lmenv_attach, NULL, NULL);
 
-static const char * lmenv_compats[] = {
-	"lm87",
-	"lm87cimt",
-	"adm9240",
-	"lm81",
-	"ds1780",
-	NULL
-};
-
-static const struct device_compatible_entry lmenv_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(lmenv_compats),
-	DEVICE_COMPAT_TERMINATOR,
+static const struct device_compatible_entry compat_data[] = {
+	{ "lm87",			0 },
+	{ "lm87cimt",			0 },
+	{ "adm9240",			0 },
+	{ "lm81",			0 },
+	{ "ds1780",			0 },
+	{ NULL,				0 }
 };
 
 int
@@ -156,7 +151,7 @@ lmenv_match(device_t parent, cfdata_t ma
 	u_int8_t cmd, val;
 	int error, i, match_result;
 
-	if (iic_use_direct_match(ia, match, lmenv_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 	
 	/*

Index: src/sys/dev/i2c/pcf8563.c
diff -u src/sys/dev/i2c/pcf8563.c:1.10 src/sys/dev/i2c/pcf8563.c:1.11
--- src/sys/dev/i2c/pcf8563.c:1.10	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/pcf8563.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: pcf8563.c,v 1.10 2018/06/18 17:07:07 thorpej Exp $	*/
+/*	$NetBSD: pcf8563.c,v 1.11 2018/06/26 06:03:57 thorpej Exp $	*/
 
 /*
  * Copyright (c) 2011 Jonathan A. Kollasch
@@ -32,7 +32,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pcf8563.c,v 1.10 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pcf8563.c,v 1.11 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -48,15 +48,10 @@ __KERNEL_RCSID(0, "$NetBSD: pcf8563.c,v 
 #include <dev/fdt/fdtvar.h>
 #endif
 
-static const char *compatible[] = {
-	"nxp,pcf8563",
-	"pcf8563rtc",
-	NULL
-};
-
-static const struct device_compatible_entry pcf8563rtc_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(compatible),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "nxp,pcf8563",		0 },
+	{ "pcf8563rtc",			0 },
+	{ NULL,				0 }
 };
 
 struct pcf8563rtc_softc {
@@ -83,7 +78,7 @@ pcf8563rtc_match(device_t parent, cfdata
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, cf, pcf8563rtc_compat_data, &match_result))
+	if (iic_use_direct_match(ia, cf, compat_data, &match_result))
 		return match_result;
 
 	/* indirect config - check typical address */

Index: src/sys/dev/i2c/tcakp.c
diff -u src/sys/dev/i2c/tcakp.c:1.8 src/sys/dev/i2c/tcakp.c:1.9
--- src/sys/dev/i2c/tcakp.c:1.8	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/tcakp.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: tcakp.c,v 1.8 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: tcakp.c,v 1.9 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -29,7 +29,7 @@
 #include "opt_fdt.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcakp.c,v 1.8 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcakp.c,v 1.9 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -113,14 +113,9 @@ static int	tcakp_write(struct tcakp_soft
 CFATTACH_DECL_NEW(tcakp, sizeof(struct tcakp_softc),
     tcakp_match, tcakp_attach, NULL, NULL);
 
-static const char * tcakp_compats[] = {
-	"ti,tca8418",
-	NULL
-};
-
-static const struct device_compatible_entry tcakp_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(tcakp_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "ti,tca8418",			0 },
+	{ NULL,				0 }
 };
 
 static u_int
@@ -323,7 +318,7 @@ tcakp_match(device_t parent, cfdata_t ma
 	struct i2c_attach_args *ia = aux;
 	int match_result;
 
-	if (iic_use_direct_match(ia, match, tcakp_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 
 	if (ia->ia_addr == 0x34)

Index: src/sys/dev/i2c/titemp.c
diff -u src/sys/dev/i2c/titemp.c:1.6 src/sys/dev/i2c/titemp.c:1.7
--- src/sys/dev/i2c/titemp.c:1.6	Mon Jun 18 17:07:07 2018
+++ src/sys/dev/i2c/titemp.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: titemp.c,v 1.6 2018/06/18 17:07:07 thorpej Exp $ */
+/* $NetBSD: titemp.c,v 1.7 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: titemp.c,v 1.6 2018/06/18 17:07:07 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: titemp.c,v 1.7 2018/06/26 06:03:57 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -84,14 +84,9 @@ 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 const struct device_compatible_entry titemp_compat_data[] = {
-	DEVICE_COMPAT_ENTRY(titemp_compats),
-	DEVICE_COMPAT_TERMINATOR
+static const struct device_compatible_entry compat_data[] = {
+	{ "ti,tmp451",			0 },
+	{ NULL,				0 }
 };
 
 static int
@@ -101,7 +96,7 @@ titemp_match(device_t parent, cfdata_t m
 	uint8_t mfid;
 	int error, match_result;
 
-	if (iic_use_direct_match(ia, match, titemp_compat_data, &match_result))
+	if (iic_use_direct_match(ia, match, compat_data, &match_result))
 		return match_result;
 	
 	if (ia->ia_addr != 0x4c)

Index: src/sys/kern/subr_autoconf.c
diff -u src/sys/kern/subr_autoconf.c:1.261 src/sys/kern/subr_autoconf.c:1.262
--- src/sys/kern/subr_autoconf.c:1.261	Tue Jun 26 04:32:35 2018
+++ src/sys/kern/subr_autoconf.c	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_autoconf.c,v 1.261 2018/06/26 04:32:35 thorpej Exp $ */
+/* $NetBSD: subr_autoconf.c,v 1.262 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*
  * Copyright (c) 1996, 2000 Christopher G. Demetriou
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.261 2018/06/26 04:32:35 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.262 2018/06/26 06:03:57 thorpej Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -2275,29 +2275,6 @@ device_find_by_driver_unit(const char *n
 }
 
 /*
- * device_compatible_entry_matches:
- *
- *	Helper function to determine if a device_compatible_entry
- *	contains a match for the specified "compatible" string.
- */
-static bool
-device_compatible_entry_matches(const struct device_compatible_entry *dce,
-				const char *compatible)
-{
-	const char **cpp = DEVICE_COMPAT_ENTRY_GET_STRINGS(dce);
-
-	if (dce == NULL || cpp == NULL)
-		return false;
-	
-	for (; *cpp != NULL; cpp++) {
-		if (strcmp(*cpp, compatible) == 0)
-			return true;
-	}
-
-	return false;
-}
-
-/*
  * device_compatible_match:
  *
  *	Match a driver's "compatible" data against a device's
@@ -2324,10 +2301,8 @@ device_compatible_match(const char **dev
 	for (i = 0, match_weight = ndevice_compats - 1;
 	     i < ndevice_compats;
 	     i++, match_weight--) {
-		for (dce = driver_compats;
-		     DEVICE_COMPAT_ENTRY_IS_TERMINATOR(dce) == false; dce++) {
-			if (device_compatible_entry_matches(dce,
-							 device_compats[i])) {
+		for (dce = driver_compats; dce->compat != NULL; dce++) {
+			if (strcmp(dce->compat, device_compats[i]) == 0) {
 				KASSERT(match_weight >= 0);
 				if (matching_entryp)
 					*matching_entryp = dce;

Index: src/sys/sys/device.h
diff -u src/sys/sys/device.h:1.154 src/sys/sys/device.h:1.155
--- src/sys/sys/device.h:1.154	Tue Jun 26 04:32:35 2018
+++ src/sys/sys/device.h	Tue Jun 26 06:03:57 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: device.h,v 1.154 2018/06/26 04:32:35 thorpej Exp $ */
+/* $NetBSD: device.h,v 1.155 2018/06/26 06:03:57 thorpej Exp $ */
 
 /*
  * Copyright (c) 1996, 2000 Christopher G. Demetriou
@@ -124,27 +124,9 @@ typedef struct cfattach *cfattach_t;
 
 #if defined(_KERNEL) || defined(_KMEMUSER)
 struct device_compatible_entry {
-	const char **	dce_compat_strings;
-	union {
-		uintptr_t dceu_val;
-		const void *dceu_ptr;
-	} dce_un;
-};
-#define	DEVICE_COMPAT_ENTRY_WITH_DATA(strings, opaque)			\
-	{ .dce_compat_strings = (strings),				\
-	  .dce_un.dceu_val = (uintptr_t)(opaque) }
-
-#define	DEVICE_COMPAT_ENTRY(strings)					\
-	DEVICE_COMPAT_ENTRY_WITH_DATA(strings, 0)
-
-#define	DEVICE_COMPAT_TERMINATOR					\
-	{ .dce_compat_strings = NULL }
-
-#define	DEVICE_COMPAT_ENTRY_GET_STRINGS(_dce)	((_dce)->dce_compat_strings)
-#define	DEVICE_COMPAT_ENTRY_GET_NUM(_dce)	((_dce)->dce_un.dceu_val)
-#define	DEVICE_COMPAT_ENTRY_GET_PTR(_dce)	((_dce)->dce_un.dceu_ptr)
-#define	DEVICE_COMPAT_ENTRY_IS_TERMINATOR(_dce)				\
-	(((_dce) == NULL || (_dce)->dce_compat_strings == NULL) ? true : false)
+	const char	*compat;
+	uintptr_t	data;
+};
 
 struct device_lock {
 	int		dvl_nwait;

Reply via email to