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;