More cleanup to i2c autoconfiguration:
- Get all of the drivers onto the new match quality constants. - Introduce a new helper function, iic_use_direct_match(), that has all of the logic for direct-config matching. If it returns true, the driver returns the match result (which may be 0). If it returns false, the driver does indirect-config matching. - iic_compat_match() now returns a weighted match quality; matches to lower-indexed "compatible" device property are more-specific matches, and return a better match quality accordingly.
This commit is contained in:
parent
b3019d4b3d
commit
aa41e9922c
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: stvii.c,v 1.5 2016/02/29 18:24:31 christos Exp $ */
|
||||
/* $NetBSD: stvii.c,v 1.6 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (C) 2011 Michael Lorenz.
|
||||
|
@ -30,7 +30,7 @@
|
|||
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: stvii.c,v 1.5 2016/02/29 18:24:31 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: stvii.c,v 1.6 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -136,7 +136,7 @@ stvii_match(device_t parent, cfdata_t cf, void *aux)
|
|||
DPRINTF("%02x\n", in);
|
||||
iic_release_bus(args->ia_tag, 0);
|
||||
}
|
||||
return (ret >= 0);
|
||||
return (ret >= 0) ? I2C_MATCH_ADDRESS_AND_PROBE : 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: nbppcon.c,v 1.2 2012/06/16 05:58:03 kiyohara Exp $ */
|
||||
/* $NetBSD: nbppcon.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2011 KIYOHARA Takashi
|
||||
* All rights reserved.
|
||||
|
@ -25,7 +25,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: nbppcon.c,v 1.2 2012/06/16 05:58:03 kiyohara Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: nbppcon.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -78,7 +78,7 @@ nbppcon_match(device_t parent, cfdata_t match, void *aux)
|
|||
!platid_match(&platid, &platid_mask_MACH_PSIONTEKLOGIX_NETBOOK_PRO))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: deq.c,v 1.13 2018/05/04 17:15:23 macallan Exp $ */
|
||||
/* $NetBSD: deq.c,v 1.14 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (C) 2005 Michael Lorenz
|
||||
|
@ -32,7 +32,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: deq.c,v 1.13 2018/05/04 17:15:23 macallan Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: deq.c,v 1.14 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -65,15 +65,13 @@ int
|
|||
deq_match(device_t parent, struct cfdata *cf, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
|
||||
if (ia->ia_name) {
|
||||
if (ia->ia_ncompat > 0) {
|
||||
if (iic_compat_match(ia, deq_compats))
|
||||
return 1;
|
||||
}
|
||||
if (strcmp(ia->ia_name, "deq") == 0)
|
||||
return 1;
|
||||
}
|
||||
int match_result;
|
||||
|
||||
if (iic_use_direct_match(ia, cf, deq_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* This driver is direct-config only. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -115,15 +115,15 @@ static int
|
|||
smusat_match(device_t parent, struct cfdata *cf, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
/* no ID registers on this chip */
|
||||
if (ia->ia_addr == 0x58)
|
||||
return 1;
|
||||
return 0;
|
||||
} else {
|
||||
return iic_compat_match(ia, smusat_compats);
|
||||
}
|
||||
if (iic_use_direct_match(ia, cf, smusat_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
if (ia->ia_addr == 0x58)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: videopll.c,v 1.2 2017/09/22 04:01:41 macallan Exp $ */
|
||||
/* $NetBSD: videopll.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2012 Michael Lorenz
|
||||
|
@ -33,7 +33,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: videopll.c,v 1.2 2017/09/22 04:01:41 macallan Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: videopll.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -70,9 +70,12 @@ static int
|
|||
videopll_match(device_t parent, cfdata_t cfdata, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (strcmp(ia->ia_name, "videopll") == 0)
|
||||
return 100;
|
||||
if (iic_use_direct_match(ia, cfdata, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* This driver is direct-config only. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: pcf8591_envctrl.c,v 1.6 2012/03/18 05:26:58 mrg Exp $ */
|
||||
/* $NetBSD: pcf8591_envctrl.c,v 1.7 2018/06/16 21:22:13 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.6 2012/03/18 05:26:58 mrg Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pcf8591_envctrl.c,v 1.7 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -78,9 +78,12 @@ static int
|
|||
ecadc_match(device_t parent, cfdata_t cf, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (iic_compat_match(ia, ecadc_compats))
|
||||
return 1;
|
||||
if (iic_use_direct_match(ia, cf, ecadc_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* This driver is direct-config only. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: tda.c,v 1.11 2016/07/07 06:55:38 msaitoh Exp $ */
|
||||
/* $NetBSD: tda.c,v 1.12 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
/* $OpenBSD: tda.c,v 1.4 2008/02/27 17:25:00 robert Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: tda.c,v 1.11 2016/07/07 06:55:38 msaitoh Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: tda.c,v 1.12 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -100,7 +100,9 @@ tda_match(device_t parent, cfdata_t match, void *aux)
|
|||
*/
|
||||
if (ia->ia_name == NULL)
|
||||
return(0);
|
||||
return strcmp(ia->ia_name, "fan-control") == 0;
|
||||
|
||||
return strcmp(ia->ia_name, "fan-control") == 0 ?
|
||||
I2C_MATCH_DIRECT_SPECIFIC : 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ioexp.c,v 1.1 2011/06/19 16:20:09 nonaka Exp $ */
|
||||
/* $NetBSD: ioexp.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2011 The NetBSD Foundation, Inc.
|
||||
|
@ -30,7 +30,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: ioexp.c,v 1.1 2011/06/19 16:20:09 nonaka Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ioexp.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -86,20 +86,19 @@ static int
|
|||
ioexp_match(device_t parent, cfdata_t cf, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
/* only for SL-C1000 */
|
||||
if (!ZAURUS_ISC1000)
|
||||
return 0;
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* direct config - check name */
|
||||
if (strcmp(ia->ia_name, "ioexp") == 0)
|
||||
return 1;
|
||||
} else {
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == IOEXP_ADDRESS)
|
||||
return 1;
|
||||
}
|
||||
if (iic_use_direct_match(ia, cf, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == IOEXP_ADDRESS)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: wm8731_zaudio.c,v 1.1 2014/09/23 14:49:46 nonaka Exp $ */
|
||||
/* $NetBSD: wm8731_zaudio.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2013 The NetBSD Foundation, Inc.
|
||||
|
@ -38,7 +38,7 @@
|
|||
#include "opt_zaudio.h"
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: wm8731_zaudio.c,v 1.1 2014/09/23 14:49:46 nonaka Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: wm8731_zaudio.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -211,19 +211,18 @@ wm8731_write(struct zaudio_softc *sc, int reg, int val)
|
|||
int
|
||||
wm8731_match(device_t parent, cfdata_t cf, struct i2c_attach_args *ia)
|
||||
{
|
||||
int match_result;
|
||||
|
||||
if (ZAURUS_ISC1000 || ZAURUS_ISC3000)
|
||||
return 0;
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* direct config - check name */
|
||||
if (strcmp(ia->ia_name, "zaudio") == 0)
|
||||
return 1;
|
||||
} else {
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == WM8731_ADDRESS)
|
||||
return 1;
|
||||
}
|
||||
if (iic_use_direct_match(ia, cf, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == WM8731_ADDRESS)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: wm8750_zaudio.c,v 1.1 2014/09/23 14:49:46 nonaka Exp $ */
|
||||
/* $NetBSD: wm8750_zaudio.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
/* $OpenBSD: zaurus_audio.c,v 1.8 2005/08/18 13:23:02 robert Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -51,7 +51,7 @@
|
|||
#include "opt_zaudio.h"
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: wm8750_zaudio.c,v 1.1 2014/09/23 14:49:46 nonaka Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: wm8750_zaudio.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -276,19 +276,18 @@ wm8750_write(struct zaudio_softc *sc, int reg, int val)
|
|||
int
|
||||
wm8750_match(device_t parent, cfdata_t cf, struct i2c_attach_args *ia)
|
||||
{
|
||||
int match_result;
|
||||
|
||||
if (ZAURUS_ISC860)
|
||||
return 0;
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* direct config - check name */
|
||||
if (strcmp(ia->ia_name, "zaudio") == 0)
|
||||
return 1;
|
||||
} else {
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == WM8750_ADDRESS)
|
||||
return 1;
|
||||
}
|
||||
if (iic_use_direct_match(ia, cf, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == WM8750_ADDRESS)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ac100.c,v 1.1 2014/12/07 14:24:11 jmcneill Exp $ */
|
||||
/* $NetBSD: ac100.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2014 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: ac100.c,v 1.1 2014/12/07 14:24:11 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ac100.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -109,7 +109,7 @@ CFATTACH_DECL_NEW(ac100ic, sizeof(struct ac100_softc),
|
|||
static int
|
||||
ac100_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_ONLY; /* XXX */
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: act8846.c,v 1.4 2018/04/30 20:26:09 jmcneill Exp $ */
|
||||
/* $NetBSD: act8846.c,v 1.5 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2015 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -29,7 +29,7 @@
|
|||
//#define ACT_DEBUG
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: act8846.c,v 1.4 2018/04/30 20:26:09 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: act8846.c,v 1.5 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -151,7 +151,7 @@ act8846_match(device_t parent, cfdata_t match, void *aux)
|
|||
struct i2c_attach_args *ia = aux;
|
||||
|
||||
if (ia->ia_addr == 0x5a)
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: adadc.c,v 1.3 2018/03/16 22:10:31 macallan Exp $ */
|
||||
/* $NetBSD: adadc.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2018 Michael Lorenz
|
||||
|
@ -34,7 +34,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: adadc.c,v 1.3 2018/03/16 22:10:31 macallan Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: adadc.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -105,19 +105,20 @@ static int
|
|||
adadc_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
/*
|
||||
* XXX
|
||||
* this driver is pretty much useless without OF, should
|
||||
* probably remove this
|
||||
*/
|
||||
if ((ia->ia_addr & 0x2b) == 0x2b)
|
||||
return 1;
|
||||
return 0;
|
||||
} else {
|
||||
return iic_compat_match(ia, dstemp_compats);
|
||||
}
|
||||
if (iic_use_direct_match(ia, match, dstemp_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* this driver is pretty much useless without OF, should
|
||||
* probably remove this
|
||||
*/
|
||||
if ((ia->ia_addr & 0x2b) == 0x2b)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: adm1021.c,v 1.16 2017/09/29 14:17:47 macallan Exp $ */
|
||||
/* $NetBSD: adm1021.c,v 1.17 2018/06/16 21:22:13 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.16 2017/09/29 14:17:47 macallan Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: adm1021.c,v 1.17 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -162,29 +162,19 @@ int
|
|||
admtemp_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
/*
|
||||
* Indirect config - not much we can do!
|
||||
* Check typical addresses.
|
||||
*/
|
||||
if (((ia->ia_addr >= 0x18) && (ia->ia_addr <= 0x1a)) ||
|
||||
((ia->ia_addr >= 0x29) && (ia->ia_addr <= 0x2b)) ||
|
||||
((ia->ia_addr >= 0x48) && (ia->ia_addr <= 0x4e)))
|
||||
return (1);
|
||||
} else {
|
||||
/*
|
||||
* Direct config - match via the list of compatible
|
||||
* hardware or simply match the device name.
|
||||
*/
|
||||
if (ia->ia_ncompat > 0) {
|
||||
if (iic_compat_match(ia, admtemp_compats))
|
||||
return 1;
|
||||
} else {
|
||||
if (strcmp(ia->ia_name, "admtemp") == 0)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (iic_use_direct_match(ia, match, admtemp_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
/*
|
||||
* Indirect config - not much we can do!
|
||||
* Check typical addresses.
|
||||
*/
|
||||
if (((ia->ia_addr >= 0x18) && (ia->ia_addr <= 0x1a)) ||
|
||||
((ia->ia_addr >= 0x29) && (ia->ia_addr <= 0x2b)) ||
|
||||
((ia->ia_addr >= 0x48) && (ia->ia_addr <= 0x4e)))
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: adm1026.c,v 1.2 2016/01/11 18:23:52 jdc Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: adm1026.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -132,22 +132,18 @@ adm1026_match(device_t parent, cfdata_t cf, void *aux)
|
|||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
struct adm1026_softc sc; /* For chip ident */
|
||||
int match_result;
|
||||
|
||||
sc.sc_tag = ia->ia_tag;
|
||||
sc.sc_address = ia->ia_addr;
|
||||
sc.sc_iic_flags = 0;
|
||||
|
||||
/* Direct config - match compats */
|
||||
if (ia->ia_name) {
|
||||
if (ia->ia_ncompat > 0) {
|
||||
if (iic_compat_match(ia, adm1026_compats))
|
||||
return 1;
|
||||
}
|
||||
/* Indirect config - check address and chip ID/rev. */
|
||||
} else {
|
||||
if ((ia->ia_addr & ADM1026_ADDRMASK) == ADM1026_ADDR &&
|
||||
adm1026_ident(&sc))
|
||||
return 1;
|
||||
}
|
||||
if (iic_use_direct_match(ia, cf, adm1026_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
if ((ia->ia_addr & ADM1026_ADDRMASK) == ADM1026_ADDR &&
|
||||
adm1026_ident(&sc))
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: am2315.c,v 1.2 2017/12/30 03:18:26 christos Exp $ */
|
||||
/* $NetBSD: am2315.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2017 Brad Spencer <brad@anduin.eldar.org>
|
||||
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: am2315.c,v 1.2 2017/12/30 03:18:26 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: am2315.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
/*
|
||||
* Driver for the Aosong AM2315
|
||||
|
@ -170,42 +170,19 @@ am2315_poke_m(i2c_tag_t tag, i2c_addr_t addr, const char *name, bool debug)
|
|||
static int
|
||||
am2315_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia;
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int rv;
|
||||
const bool matchdebug = false;
|
||||
int match_result;
|
||||
|
||||
ia = aux;
|
||||
if (iic_use_direct_match(ia, match, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* direct config - check name */
|
||||
if (strcmp(ia->ia_name, "am2315temp") != 0)
|
||||
return 0;
|
||||
} else {
|
||||
/* indirect config - check for configured address */
|
||||
if (ia->ia_addr != AM2315_TYPICAL_ADDR)
|
||||
return 0;
|
||||
}
|
||||
/* indirect config - check for standard address */
|
||||
if (ia->ia_addr == AM2315_TYPICAL_ADDR)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
/*
|
||||
* Check to see if something is really at this i2c address. This will
|
||||
* keep phantom devices from appearing
|
||||
*/
|
||||
if (iic_acquire_bus(ia->ia_tag, 0) != 0) {
|
||||
if (matchdebug)
|
||||
printf("in match acquire bus failed\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((rv = am2315_poke_m(ia->ia_tag, ia->ia_addr, __func__, matchdebug))
|
||||
!= 0) {
|
||||
if (matchdebug)
|
||||
printf("match rv poke %d\n", rv);
|
||||
iic_release_bus(ia->ia_tag, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
iic_release_bus(ia->ia_tag, 0);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: as3722.c,v 1.12 2017/05/28 15:55:11 jmcneill Exp $ */
|
||||
/* $NetBSD: as3722.c,v 1.13 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2015 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -29,7 +29,7 @@
|
|||
#include "opt_fdt.h"
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: as3722.c,v 1.12 2017/05/28 15:55:11 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: as3722.c,v 1.13 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -51,6 +51,8 @@ __KERNEL_RCSID(0, "$NetBSD: as3722.c,v 1.12 2017/05/28 15:55:11 jmcneill Exp $")
|
|||
#include <dev/fdt/fdtvar.h>
|
||||
#endif
|
||||
|
||||
#define AS3722_I2C_ADDR 0x40
|
||||
|
||||
#define AS3722_START_YEAR 2000
|
||||
|
||||
#define AS3722_SD0_VOLTAGE_REG 0x00
|
||||
|
@ -230,22 +232,24 @@ as3722_match(device_t parent, cfdata_t match, void *aux)
|
|||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
uint8_t reg, id1;
|
||||
int error;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
iic_acquire_bus(ia->ia_tag, I2C_F_POLL);
|
||||
reg = AS3722_ASIC_ID1_REG;
|
||||
error = iic_exec(ia->ia_tag, I2C_OP_READ_WITH_STOP, ia->ia_addr,
|
||||
®, 1, &id1, 1, I2C_F_POLL);
|
||||
iic_release_bus(ia->ia_tag, I2C_F_POLL);
|
||||
|
||||
if (error == 0 && id1 == 0x0c)
|
||||
return 1;
|
||||
int error, match_result;
|
||||
|
||||
if (iic_use_direct_match(ia, match, as3722_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
if (ia->ia_addr != AS3722_I2C_ADDR)
|
||||
return 0;
|
||||
} else {
|
||||
return iic_compat_match(ia, as3722_compats);
|
||||
}
|
||||
|
||||
iic_acquire_bus(ia->ia_tag, I2C_F_POLL);
|
||||
reg = AS3722_ASIC_ID1_REG;
|
||||
error = iic_exec(ia->ia_tag, I2C_OP_READ_WITH_STOP, ia->ia_addr,
|
||||
®, 1, &id1, 1, I2C_F_POLL);
|
||||
iic_release_bus(ia->ia_tag, I2C_F_POLL);
|
||||
|
||||
if (error == 0 && id1 == 0x0c)
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: at24cxx.c,v 1.25 2017/10/28 04:53:55 riastradh Exp $ */
|
||||
/* $NetBSD: at24cxx.c,v 1.26 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Wasabi Systems, Inc.
|
||||
|
@ -36,7 +36,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: at24cxx.c,v 1.25 2017/10/28 04:53:55 riastradh Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: at24cxx.c,v 1.26 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -131,21 +131,15 @@ static int
|
|||
seeprom_match(device_t parent, cfdata_t cf, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name) {
|
||||
if (ia->ia_ncompat > 0) {
|
||||
if (iic_compat_match(ia, seeprom_compats))
|
||||
return (1);
|
||||
} else {
|
||||
if (strcmp(ia->ia_name, "seeprom") == 0)
|
||||
return (1);
|
||||
}
|
||||
} else {
|
||||
if ((ia->ia_addr & AT24CXX_ADDRMASK) == AT24CXX_ADDR)
|
||||
return (1);
|
||||
}
|
||||
if (iic_use_direct_match(ia, cf, seeprom_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
return (0);
|
||||
if ((ia->ia_addr & AT24CXX_ADDRMASK) == AT24CXX_ADDR)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: axp20x.c,v 1.10 2017/10/22 11:00:28 jmcneill Exp $ */
|
||||
/* $NetBSD: axp20x.c,v 1.11 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2014-2017 Jared McNeill <jmcneill@invisible.ca>
|
||||
|
@ -29,7 +29,7 @@
|
|||
#include "opt_fdt.h"
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: axp20x.c,v 1.10 2017/10/22 11:00:28 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: axp20x.c,v 1.11 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -47,6 +47,8 @@ __KERNEL_RCSID(0, "$NetBSD: axp20x.c,v 1.10 2017/10/22 11:00:28 jmcneill Exp $")
|
|||
#include <dev/fdt/fdtvar.h>
|
||||
#endif
|
||||
|
||||
#define AXP209_I2C_ADDR 0x34
|
||||
|
||||
#define AXP_INPUT_STATUS 0x00
|
||||
#define AXP_INPUT_STATUS_AC_PRESENT __BIT(7)
|
||||
#define AXP_INPUT_STATUS_AC_OK __BIT(6)
|
||||
|
@ -221,11 +223,14 @@ static int
|
|||
axp20x_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args * const ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name != NULL)
|
||||
return iic_compat_match(ia, compatible);
|
||||
if (iic_use_direct_match(ia, match, compatible, &match_result))
|
||||
return match_result;
|
||||
|
||||
return 1;
|
||||
/* This device is direct-config only. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: axp22x.c,v 1.3 2017/10/07 20:31:48 jmcneill Exp $ */
|
||||
/* $NetBSD: axp22x.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2014 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: axp22x.c,v 1.3 2017/10/07 20:31:48 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: axp22x.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -69,11 +69,14 @@ static int
|
|||
axp22x_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name != NULL)
|
||||
return iic_compat_match(ia, compatible);
|
||||
if (iic_use_direct_match(ia, match, compatible, &match_result))
|
||||
return match_result;
|
||||
|
||||
return 1;
|
||||
/* This device is direct-config only. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: axp809.c,v 1.1 2014/12/07 00:33:26 jmcneill Exp $ */
|
||||
/* $NetBSD: axp809.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2014 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -29,7 +29,7 @@
|
|||
#define AXP_DEBUG
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: axp809.c,v 1.1 2014/12/07 00:33:26 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: axp809.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -105,7 +105,15 @@ CFATTACH_DECL_NEW(axp809pm, sizeof(struct axp809_softc),
|
|||
static int
|
||||
axp809_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
return 1;
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (iic_use_direct_match(ia, match, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* This device is direct-config only. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: axppmic.c,v 1.10 2018/05/26 14:39:20 jmcneill Exp $ */
|
||||
/* $NetBSD: axppmic.c,v 1.11 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2014-2018 Jared McNeill <jmcneill@invisible.ca>
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: axppmic.c,v 1.10 2018/05/26 14:39:20 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: axppmic.c,v 1.11 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -679,14 +679,25 @@ axppmic_match(device_t parent, cfdata_t match, void *aux)
|
|||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
|
||||
/* XXXJRT Gross. */
|
||||
if (ia->ia_name != NULL) {
|
||||
if (ia->ia_cookie)
|
||||
return of_match_compat_data(ia->ia_cookie, compat_data);
|
||||
else
|
||||
if (ia->ia_cookie) {
|
||||
int match_result =
|
||||
of_match_compat_data(ia->ia_cookie, compat_data);
|
||||
if (match_result) {
|
||||
match_result = match_result - 1 +
|
||||
I2C_MATCH_DIRECT_COMPATIBLE;
|
||||
match_result = MIN(match_result,
|
||||
I2C_MATCH_DIRECT_COMPATIBLE_MAX);
|
||||
}
|
||||
return match_result;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
/* This device is direct-config only. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dbcool.c,v 1.48 2018/02/06 10:02:09 mrg Exp $ */
|
||||
/* $NetBSD: dbcool.c,v 1.49 2018/06/16 21:22:13 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.48 2018/02/06 10:02:09 mrg Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dbcool.c,v 1.49 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -748,20 +748,16 @@ dbcool_match(device_t parent, cfdata_t cf, void *aux)
|
|||
dc.dc_chip = NULL;
|
||||
dc.dc_readreg = dbcool_readreg;
|
||||
dc.dc_writereg = dbcool_writereg;
|
||||
int match_result;
|
||||
|
||||
if (iic_use_direct_match(ia, cf, dbcool_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
if ((ia->ia_addr & DBCOOL_ADDRMASK) != DBCOOL_ADDR)
|
||||
return 0;
|
||||
if (dbcool_chip_ident(&dc) >= 0)
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
|
||||
/* Direct config - match compats */
|
||||
if (ia->ia_name) {
|
||||
if (ia->ia_ncompat > 0) {
|
||||
if (iic_compat_match(ia, dbcool_compats))
|
||||
return 1;
|
||||
}
|
||||
/* Indirect config - check address and chip ID */
|
||||
} else {
|
||||
if ((ia->ia_addr & DBCOOL_ADDRMASK) != DBCOOL_ADDR)
|
||||
return 0;
|
||||
if (dbcool_chip_ident(&dc) >= 0)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ddc.c,v 1.6 2015/07/25 15:20:49 jmcneill Exp $ */
|
||||
/* $NetBSD: ddc.c,v 1.7 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2006 Itronix Inc.
|
||||
|
@ -32,7 +32,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: ddc.c,v 1.6 2015/07/25 15:20:49 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ddc.c,v 1.7 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -70,7 +70,7 @@ ddc_match(device_t parent, cfdata_t cf, void *aux)
|
|||
struct i2c_attach_args *ia = aux;
|
||||
|
||||
if (ia->ia_addr == DDC_ADDR)
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dstemp.c,v 1.1 2018/02/01 21:44:17 macallan Exp $ */
|
||||
/* $NetBSD: dstemp.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2018 Michael Lorenz
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: dstemp.c,v 1.1 2018/02/01 21:44:17 macallan Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dstemp.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -81,15 +81,15 @@ static int
|
|||
dstemp_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
/* no ID registers on this chip */
|
||||
if ((ia->ia_addr & 0xf8) == 0x48)
|
||||
return 1;
|
||||
return 0;
|
||||
} else {
|
||||
return iic_compat_match(ia, dstemp_compats);
|
||||
}
|
||||
if (iic_use_direct_match(ia, match, dstemp_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
if ((ia->ia_addr & 0xf8) == 0x48)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: em3027.c,v 1.1 2018/01/05 03:07:15 uwe Exp $ */
|
||||
/* $NetBSD: em3027.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2018 Valery Ushakov
|
||||
* All rights reserved.
|
||||
|
@ -28,7 +28,7 @@
|
|||
* EM Microelectronic EM3027 RTC
|
||||
*/
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: em3027.c,v 1.1 2018/01/05 03:07:15 uwe Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: em3027.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -128,7 +128,7 @@ em3027rtc_match(device_t parent, cfdata_t cf, void *aux)
|
|||
if (error)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: fcu.c,v 1.3 2018/03/21 15:41:34 macallan Exp $ */
|
||||
/* $NetBSD: fcu.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2018 Michael Lorenz
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: fcu.c,v 1.3 2018/03/21 15:41:34 macallan Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: fcu.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -124,15 +124,15 @@ static int
|
|||
fcu_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
/* no ID registers on this chip */
|
||||
if (ia->ia_addr == 0x2f)
|
||||
return 1;
|
||||
return 0;
|
||||
} else {
|
||||
return iic_compat_match(ia, fcu_compats);
|
||||
}
|
||||
if (iic_use_direct_match(ia, match, fcu_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
if (ia->ia_addr == 0x2f)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: g760a.c,v 1.4 2012/07/29 07:04:09 mlelstv Exp $ */
|
||||
/* $NetBSD: g760a.c,v 1.5 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (C) 2008 A.Leo.
|
||||
|
@ -32,7 +32,7 @@
|
|||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__KERNEL_RCSID(0, "$NetBSD: g760a.c,v 1.4 2012/07/29 07:04:09 mlelstv Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: g760a.c,v 1.5 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -79,7 +79,7 @@ g760a_match(device_t parent, struct cfdata* cf, void* arg)
|
|||
/*
|
||||
* TODO: set up minimal speed?
|
||||
*/
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: i2c.c,v 1.61 2018/06/07 13:30:49 thorpej Exp $ */
|
||||
/* $NetBSD: i2c.c,v 1.62 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Wasabi Systems, Inc.
|
||||
|
@ -40,7 +40,7 @@
|
|||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.61 2018/06/07 13:30:49 thorpej Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.62 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -109,8 +109,9 @@ iic_print_direct(void *aux, const char *pnp)
|
|||
struct i2c_attach_args *ia = aux;
|
||||
|
||||
if (pnp != NULL)
|
||||
aprint_normal("%s at %s addr 0x%02x", ia->ia_name, pnp,
|
||||
ia->ia_addr);
|
||||
aprint_normal("%s at %s addr 0x%02x",
|
||||
ia->ia_name ? ia->ia_name : "(unknown)",
|
||||
pnp, ia->ia_addr);
|
||||
else
|
||||
aprint_normal(" addr 0x%02x", ia->ia_addr);
|
||||
|
||||
|
@ -452,8 +453,10 @@ iic_attach(device_t parent, device_t self, void *aux)
|
|||
dev = prop_array_get(child_devices, i);
|
||||
if (!dev) continue;
|
||||
if (!prop_dictionary_get_cstring_nocopy(
|
||||
dev, "name", &name))
|
||||
continue;
|
||||
dev, "name", &name)) {
|
||||
/* "name" property is optional. */
|
||||
name = NULL;
|
||||
}
|
||||
if (!prop_dictionary_get_uint32(dev, "addr", &addr))
|
||||
continue;
|
||||
if (!prop_dictionary_get_uint64(dev, "cookie", &cookie))
|
||||
|
@ -480,14 +483,21 @@ iic_attach(device_t parent, device_t self, void *aux)
|
|||
prop_data_data_nocopy(cdata),
|
||||
prop_data_size(cdata), &buf);
|
||||
|
||||
if (addr > I2C_MAX_ADDR) {
|
||||
if (name == NULL && cdata == NULL) {
|
||||
aprint_error_dev(self,
|
||||
"WARNING: ignoring bad device address "
|
||||
"@ 0x%02x\n", addr);
|
||||
} else if (sc->sc_devices[addr] == NULL) {
|
||||
sc->sc_devices[addr] =
|
||||
config_found_sm_loc(self, "iic", loc, &ia,
|
||||
iic_print_direct, NULL);
|
||||
"WARNING: ignoring bad child device entry "
|
||||
"for address 0x%02x\n", addr);
|
||||
} else {
|
||||
if (addr > I2C_MAX_ADDR) {
|
||||
aprint_error_dev(self,
|
||||
"WARNING: ignoring bad device "
|
||||
"address @ 0x%02x\n", addr);
|
||||
} else if (sc->sc_devices[addr] == NULL) {
|
||||
sc->sc_devices[addr] =
|
||||
config_found_sm_loc(self, "iic",
|
||||
loc, &ia, iic_print_direct,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
if (ia.ia_compat)
|
||||
|
@ -680,18 +690,58 @@ iic_fill_compat(struct i2c_attach_args *ia, const char *compat, size_t len,
|
|||
ia->ia_ncompat = count;
|
||||
}
|
||||
|
||||
/*
|
||||
* iic_compat_match --
|
||||
* Match a device's "compatible" property against the list
|
||||
* of compatible strings provided by the driver. Note that
|
||||
* we weight the match to the reverse index of the device's
|
||||
* "compatible" property strings so that a driver that matches
|
||||
* an lower-indexed "compatible" property is given a higher
|
||||
* match priority than one that matches a higher-indexed
|
||||
* "compatible" property.
|
||||
*/
|
||||
int
|
||||
iic_compat_match(struct i2c_attach_args *ia, const char ** compats)
|
||||
iic_compat_match(const struct i2c_attach_args *ia, const char **compats)
|
||||
{
|
||||
int i;
|
||||
int match_result = 0, i, ri;
|
||||
|
||||
if (ia->ia_ncompat == 0 || ia->ia_compat == NULL)
|
||||
return 0;
|
||||
|
||||
for (; compats && *compats; compats++) {
|
||||
for (i = 0; i < ia->ia_ncompat; i++) {
|
||||
if (strcmp(*compats, ia->ia_compat[i]) == 0)
|
||||
return 1;
|
||||
for (i = 0, ri = ia->ia_ncompat - 1;
|
||||
i < ia->ia_ncompat;
|
||||
i++, ri--) {
|
||||
if (strcmp(*compats, ia->ia_compat[i]) == 0) {
|
||||
KASSERT(ri >= 0);
|
||||
match_result =
|
||||
I2C_MATCH_DIRECT_COMPATIBLE + ri;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
match_result = MIN(match_result, I2C_MATCH_DIRECT_COMPATIBLE_MAX);
|
||||
return match_result;
|
||||
}
|
||||
|
||||
bool
|
||||
iic_use_direct_match(const struct i2c_attach_args *ia, const cfdata_t cf,
|
||||
const char **compats, int *match_resultp)
|
||||
{
|
||||
|
||||
KASSERT(match_resultp != NULL);
|
||||
|
||||
if (ia->ia_name != NULL &&
|
||||
strcmp(ia->ia_name, cf->cf_name) == 0) {
|
||||
*match_resultp = I2C_MATCH_DIRECT_SPECIFIC;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ia->ia_ncompat > 0 && ia->ia_compat != NULL) {
|
||||
*match_resultp = iic_compat_match(ia, compats);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: i2cvar.h,v 1.13 2018/06/07 13:30:49 thorpej Exp $ */
|
||||
/* $NetBSD: i2cvar.h,v 1.14 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Wasabi Systems, Inc.
|
||||
|
@ -38,6 +38,7 @@
|
|||
#ifndef _DEV_I2C_I2CVAR_H_
|
||||
#define _DEV_I2C_I2CVAR_H_
|
||||
|
||||
#include <sys/device.h>
|
||||
#include <dev/i2c/i2c_io.h>
|
||||
#include <prop/proplib.h>
|
||||
|
||||
|
@ -159,7 +160,13 @@ struct i2c_attach_args {
|
|||
* API presented to i2c controllers.
|
||||
*/
|
||||
int iicbus_print(void *, const char *);
|
||||
int iic_compat_match(struct i2c_attach_args*, const char **);
|
||||
|
||||
/*
|
||||
* API presented to i2c devices.
|
||||
*/
|
||||
int iic_compat_match(const struct i2c_attach_args *, const char **);
|
||||
bool iic_use_direct_match(const struct i2c_attach_args *,
|
||||
const cfdata_t, const char **, int *);
|
||||
|
||||
/*
|
||||
* Constants to indicate the quality of a match made by a driver's
|
||||
|
@ -176,7 +183,8 @@ int iic_compat_match(struct i2c_attach_args*, const char **);
|
|||
#define I2C_MATCH_ADDRESS_ONLY 1
|
||||
#define I2C_MATCH_ADDRESS_AND_PROBE 2
|
||||
#define I2C_MATCH_DIRECT_COMPATIBLE 10
|
||||
#define I2C_MATCH_DIRECT_SPECIFIC 50
|
||||
#define I2C_MATCH_DIRECT_COMPATIBLE_MAX 99
|
||||
#define I2C_MATCH_DIRECT_SPECIFIC 100
|
||||
|
||||
#ifdef _I2C_PRIVATE
|
||||
/*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ibmhawk.c,v 1.6 2018/06/06 01:49:08 maya Exp $ */
|
||||
/* $NetBSD: ibmhawk.c,v 1.7 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2011 The NetBSD Foundation, Inc.
|
||||
|
@ -109,7 +109,8 @@ ibmhawk_match(device_t parent, cfdata_t match, void *aux)
|
|||
sc.sc_addr = ia->ia_addr;
|
||||
if (ibmhawk_request(&sc, IHR_EQUIP, &resp))
|
||||
return 0;
|
||||
return 1;
|
||||
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ihidev.c,v 1.2 2018/03/20 12:14:52 bouyer Exp $ */
|
||||
/* $NetBSD: ihidev.c,v 1.3 2018/06/16 21:22:13 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.2 2018/03/20 12:14:52 bouyer Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ihidev.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -129,11 +129,11 @@ static int
|
|||
ihidev_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args * const ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (iic_use_direct_match(ia, match, ihidev_compats, &match_result))
|
||||
return I2C_MATCH_DIRECT_COMPATIBLE;
|
||||
|
||||
if (ia->ia_ncompat > 0) {
|
||||
if (iic_compat_match(ia, ihidev_compats))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: lm75.c,v 1.30 2017/10/01 05:12:18 macallan Exp $ */
|
||||
/* $NetBSD: lm75.c,v 1.31 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Wasabi Systems, Inc.
|
||||
|
@ -36,7 +36,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: lm75.c,v 1.30 2017/10/01 05:12:18 macallan Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: lm75.c,v 1.31 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -146,35 +146,23 @@ static int
|
|||
lmtemp_match(device_t parent, cfdata_t cf, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int i;
|
||||
int i, match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
/*
|
||||
* Indirect config - not much we can do!
|
||||
*/
|
||||
for (i = 0; lmtemptbl[i].lmtemp_type != -1 ; i++)
|
||||
if (lmtemptbl[i].lmtemp_type == cf->cf_flags)
|
||||
break;
|
||||
if (lmtemptbl[i].lmtemp_type == -1)
|
||||
return 0;
|
||||
if (iic_use_direct_match(ia, cf, lmtemp_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
if ((ia->ia_addr & lmtemptbl[i].lmtemp_addrmask) ==
|
||||
lmtemptbl[i].lmtemp_addr)
|
||||
return 1;
|
||||
} else {
|
||||
/*
|
||||
* Direct config - match via the list of compatible
|
||||
* hardware or simply match the device name.
|
||||
*/
|
||||
if (ia->ia_ncompat > 0) {
|
||||
if (iic_compat_match(ia, lmtemp_compats))
|
||||
return 1;
|
||||
} else {
|
||||
if (strcmp(ia->ia_name, "lmtemp") == 0)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Indirect config - not much we can do!
|
||||
*/
|
||||
for (i = 0; lmtemptbl[i].lmtemp_type != -1 ; i++)
|
||||
if (lmtemptbl[i].lmtemp_type == cf->cf_flags)
|
||||
break;
|
||||
if (lmtemptbl[i].lmtemp_type == -1)
|
||||
return 0;
|
||||
|
||||
if ((ia->ia_addr & lmtemptbl[i].lmtemp_addrmask) ==
|
||||
lmtemptbl[i].lmtemp_addr)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: lm87.c,v 1.7 2016/01/10 14:03:11 jdc Exp $ */
|
||||
/* $NetBSD: lm87.c,v 1.8 2018/06/16 21:22:13 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.7 2016/01/10 14:03:11 jdc Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: lm87.c,v 1.8 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -149,41 +149,30 @@ lmenv_match(device_t parent, cfdata_t match, void *aux)
|
|||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
u_int8_t cmd, val;
|
||||
int error, i;
|
||||
int error, i, match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
/*
|
||||
* Indirect config - not much we can do!
|
||||
* Check typical addresses and read the Company ID register
|
||||
*/
|
||||
if ((ia->ia_addr < 0x2c) || (ia->ia_addr > 0x2f))
|
||||
return 0;
|
||||
if (iic_use_direct_match(ia, match, lmenv_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
/*
|
||||
* Indirect config - not much we can do!
|
||||
* Check typical addresses and read the Company ID register
|
||||
*/
|
||||
if ((ia->ia_addr < 0x2c) || (ia->ia_addr > 0x2f))
|
||||
return 0;
|
||||
|
||||
cmd = LM87_COMPANY_ID;
|
||||
iic_acquire_bus(ia->ia_tag, 0);
|
||||
error = iic_exec(ia->ia_tag, I2C_OP_READ_WITH_STOP, ia->ia_addr,
|
||||
&cmd, 1, &val, 1, I2C_F_POLL);
|
||||
iic_release_bus(ia->ia_tag, 0);
|
||||
cmd = LM87_COMPANY_ID;
|
||||
iic_acquire_bus(ia->ia_tag, 0);
|
||||
error = iic_exec(ia->ia_tag, I2C_OP_READ_WITH_STOP, ia->ia_addr,
|
||||
&cmd, 1, &val, 1, I2C_F_POLL);
|
||||
iic_release_bus(ia->ia_tag, 0);
|
||||
|
||||
if (error)
|
||||
return 0;
|
||||
if (error)
|
||||
return 0;
|
||||
|
||||
for (i = 0; lmenv_ids[i].id != 0; i++)
|
||||
if (lmenv_ids[i].id == val)
|
||||
return 1;
|
||||
} else {
|
||||
/*
|
||||
* Direct config - match via the list of compatible
|
||||
* hardware or simply match the device name.
|
||||
*/
|
||||
if (ia->ia_ncompat > 0) {
|
||||
if (iic_compat_match(ia, lmenv_compats))
|
||||
return 1;
|
||||
} else {
|
||||
if (strcmp(ia->ia_name, "lmenv") == 0)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
for (i = 0; lmenv_ids[i].id != 0; i++)
|
||||
if (lmenv_ids[i].id == val)
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: lm_i2c.c,v 1.4 2017/08/18 04:07:51 msaitoh Exp $ */
|
||||
/* $NetBSD: lm_i2c.c,v 1.5 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2000 The NetBSD Foundation, Inc.
|
||||
|
@ -30,7 +30,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: lm_i2c.c,v 1.4 2017/08/18 04:07:51 msaitoh Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: lm_i2c.c,v 1.5 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -71,6 +71,8 @@ lm_i2c_match(device_t parent, cfdata_t match, void *aux)
|
|||
if (ia->ia_addr < 1)
|
||||
return 0;
|
||||
|
||||
/* XXXJRT filter addresses //at all// please? */
|
||||
|
||||
/* Bus independent probe */
|
||||
sc.sc_lmsc.lm_writereg = lm_i2c_writereg;
|
||||
sc.sc_lmsc.lm_readreg = lm_i2c_readreg;
|
||||
|
@ -78,7 +80,7 @@ lm_i2c_match(device_t parent, cfdata_t match, void *aux)
|
|||
sc.sc_addr = ia->ia_addr;
|
||||
rv = lm_match(&sc.sc_lmsc);
|
||||
|
||||
return rv;
|
||||
return rv ? I2C_MATCH_ADDRESS_AND_PROBE : 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: m41st84.c,v 1.23 2017/10/28 04:53:55 riastradh Exp $ */
|
||||
/* $NetBSD: m41st84.c,v 1.24 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Wasabi Systems, Inc.
|
||||
|
@ -36,7 +36,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: m41st84.c,v 1.23 2017/10/28 04:53:55 riastradh Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: m41st84.c,v 1.24 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include "opt_strtc.h"
|
||||
|
||||
|
@ -102,16 +102,15 @@ static int
|
|||
strtc_match(device_t parent, cfdata_t cf, void *arg)
|
||||
{
|
||||
struct i2c_attach_args *ia = arg;
|
||||
int match_result;
|
||||
|
||||
if (iic_use_direct_match(ia, cf, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == M41ST84_ADDR)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* direct config - check name */
|
||||
if (strcmp(ia->ia_name, "strtc") == 0)
|
||||
return 1;
|
||||
} else {
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == M41ST84_ADDR)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: m41t00.c,v 1.20 2017/10/28 04:53:55 riastradh Exp $ */
|
||||
/* $NetBSD: m41t00.c,v 1.21 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Wasabi Systems, Inc.
|
||||
|
@ -36,7 +36,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: m41t00.c,v 1.20 2017/10/28 04:53:55 riastradh Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: m41t00.c,v 1.21 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -102,7 +102,7 @@ m41t00_match(device_t parent, cfdata_t cf, void *aux)
|
|||
struct i2c_attach_args *ia = aux;
|
||||
|
||||
if (ia->ia_addr == M41T00_ADDR) {
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: max6900.c,v 1.15 2014/11/20 16:34:26 christos Exp $ */
|
||||
/* $NetBSD: max6900.c,v 1.16 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Wasabi Systems, Inc.
|
||||
|
@ -36,7 +36,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: max6900.c,v 1.15 2014/11/20 16:34:26 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: max6900.c,v 1.16 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -98,7 +98,7 @@ maxrtc_match(device_t parent, cfdata_t cf, void *aux)
|
|||
struct i2c_attach_args *ia = aux;
|
||||
|
||||
if ((ia->ia_addr & MAX6900_ADDRMASK) == MAX6900_ADDR)
|
||||
return (1);
|
||||
return (I2C_MATCH_ADDRESS_ONLY);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: max77620.c,v 1.2 2017/09/28 13:08:00 jmcneill Exp $ */
|
||||
/* $NetBSD: max77620.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2017 Jared McNeill <jmcneill@invisible.ca>
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: max77620.c,v 1.2 2017/09/28 13:08:00 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: max77620.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -258,11 +258,12 @@ static int
|
|||
max77620_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name == NULL)
|
||||
return 0;
|
||||
if (iic_use_direct_match(ia, match, max77620_compats, match_result))
|
||||
return match_result;
|
||||
|
||||
return iic_compat_match(ia, max77620_compats);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: mcp980x.c,v 1.5 2013/10/28 11:24:08 rkujawa Exp $ */
|
||||
/* $NetBSD: mcp980x.c,v 1.6 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2013 The NetBSD Foundation, Inc.
|
||||
|
@ -38,7 +38,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: mcp980x.c,v 1.5 2013/10/28 11:24:08 rkujawa Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: mcp980x.c,v 1.6 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -106,12 +106,12 @@ CFATTACH_DECL_NEW(mcp980x, sizeof (struct mcp980x_softc),
|
|||
static int
|
||||
mcp980x_match(device_t parent, cfdata_t cf, void *aux)
|
||||
{
|
||||
/*
|
||||
* No sane way to probe? Perhaps at least try to match constant part
|
||||
* of the I2Caddress.
|
||||
*/
|
||||
|
||||
return 1;
|
||||
if (ia->ia_addr >= MCP980X_ADDR_CONST &&
|
||||
ia->ia_addr <= (MCP980X_ADDR_CONST + MCP980X_ADDR_VAR))
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: mpl115a.c,v 1.1 2013/09/08 14:59:42 rkujawa Exp $ */
|
||||
/* $NetBSD: mpl115a.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2013 The NetBSD Foundation, Inc.
|
||||
|
@ -37,7 +37,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: mpl115a.c,v 1.1 2013/09/08 14:59:42 rkujawa Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: mpl115a.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -97,7 +97,7 @@ mpl115a_match(device_t parent, cfdata_t cf, void *aux)
|
|||
struct i2c_attach_args *ia = aux;
|
||||
|
||||
if (ia->ia_addr == MPL115A_ADDR)
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: pcf8563.c,v 1.8 2017/10/07 20:18:16 jmcneill Exp $ */
|
||||
/* $NetBSD: pcf8563.c,v 1.9 2018/06/16 21:22:13 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.8 2017/10/07 20:18:16 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pcf8563.c,v 1.9 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -76,15 +76,15 @@ static int
|
|||
pcf8563rtc_match(device_t parent, cfdata_t cf, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (iic_use_direct_match(ia, cf, compatible, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == PCF8563_ADDR)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* direct config - check name */
|
||||
return iic_compat_match(ia, compatible);
|
||||
} else {
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == PCF8563_ADDR)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: pcf8583.c,v 1.17 2017/10/28 04:53:55 riastradh Exp $ */
|
||||
/* $NetBSD: pcf8583.c,v 1.18 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Wasabi Systems, Inc.
|
||||
|
@ -43,7 +43,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: pcf8583.c,v 1.17 2017/10/28 04:53:55 riastradh Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: pcf8583.c,v 1.18 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -109,7 +109,7 @@ pcfrtc_match(device_t parent, cfdata_t cf, void *aux)
|
|||
struct i2c_attach_args *ia = aux;
|
||||
|
||||
if ((ia->ia_addr & PCF8583_ADDRMASK) == PCF8583_ADDR)
|
||||
return (1);
|
||||
return (I2C_MATCH_ADDRESS_ONLY);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: r2025.c,v 1.7 2014/11/20 16:34:26 christos Exp $ */
|
||||
/* $NetBSD: r2025.c,v 1.8 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2006 Shigeyuki Fukushima.
|
||||
|
@ -33,7 +33,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: r2025.c,v 1.7 2014/11/20 16:34:26 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: r2025.c,v 1.8 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -76,7 +76,7 @@ r2025rtc_match(device_t parent, cfdata_t cf, void *arg)
|
|||
|
||||
/* match only R2025 RTC devices */
|
||||
if (ia->ia_addr == R2025_ADDR)
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: rs5c372.c,v 1.14 2014/11/20 16:34:26 christos Exp $ */
|
||||
/* $NetBSD: rs5c372.c,v 1.15 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (C) 2005 NONAKA Kimihiro <nonaka@netbsd.org>
|
||||
|
@ -26,7 +26,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: rs5c372.c,v 1.14 2014/11/20 16:34:26 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: rs5c372.c,v 1.15 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -65,16 +65,15 @@ static int
|
|||
rs5c372rtc_match(device_t parent, cfdata_t cf, void *arg)
|
||||
{
|
||||
struct i2c_attach_args *ia = arg;
|
||||
int match_result;
|
||||
|
||||
if (iic_use_direct_match(ia, cf, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == RS5C372_ADDR)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* direct config - check name */
|
||||
if (strcmp(ia->ia_name, "rs5c372rtc") == 0)
|
||||
return 1;
|
||||
} else {
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == RS5C372_ADDR)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: s390.c,v 1.3 2014/11/20 16:34:26 christos Exp $ */
|
||||
/* $NetBSD: s390.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2011 Frank Wille.
|
||||
|
@ -29,7 +29,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: s390.c,v 1.3 2014/11/20 16:34:26 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: s390.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -66,16 +66,15 @@ static int
|
|||
s390rtc_match(device_t parent, cfdata_t cf, void *arg)
|
||||
{
|
||||
struct i2c_attach_args *ia = arg;
|
||||
int match_result;
|
||||
|
||||
if (iic_use_direct_match(ia, cf, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == S390_ADDR)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* direct config - check name */
|
||||
if (strcmp(ia->ia_name, "s390rtc") == 0)
|
||||
return 1;
|
||||
} else {
|
||||
/* indirect config - check typical address */
|
||||
if (ia->ia_addr == S390_ADDR)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: sdtemp.c,v 1.33 2018/02/22 10:09:12 msaitoh Exp $ */
|
||||
/* $NetBSD: sdtemp.c,v 1.34 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 The NetBSD Foundation, Inc.
|
||||
|
@ -30,7 +30,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: sdtemp.c,v 1.33 2018/02/22 10:09:12 msaitoh Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: sdtemp.c,v 1.34 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -240,7 +240,7 @@ sdtemp_match(device_t parent, cfdata_t cf, void *aux)
|
|||
if ((cap & SDTEMP_CAP_HAS_ALARM) == 0)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: sgsmix.c,v 1.8 2017/09/22 04:07:34 macallan Exp $ */
|
||||
/* $NetBSD: sgsmix.c,v 1.9 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (C) 2005 Michael Lorenz.
|
||||
|
@ -31,7 +31,7 @@
|
|||
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: sgsmix.c,v 1.8 2017/09/22 04:07:34 macallan Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: sgsmix.c,v 1.9 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -81,21 +81,21 @@ sgsmix_match(device_t parent, cfdata_t cf, void *aux)
|
|||
struct i2c_attach_args *args = aux;
|
||||
int ret = -1;
|
||||
uint8_t out[2] = {1, 0x20};
|
||||
int match_result;
|
||||
|
||||
if (args->ia_name) {
|
||||
if (strcmp(args->ia_name, "sgsmix") == 0)
|
||||
return 1;
|
||||
} else {
|
||||
/* see if we can talk to something at address 0x8a */
|
||||
if (args->ia_addr == 0x8a) {
|
||||
iic_acquire_bus(args->ia_tag, 0);
|
||||
ret = iic_exec(args->ia_tag, I2C_OP_WRITE, args->ia_addr,
|
||||
out, 2, NULL, 0, 0);
|
||||
iic_release_bus(args->ia_tag, 0);
|
||||
}
|
||||
return (ret >= 0);
|
||||
}
|
||||
return 0;
|
||||
if (iic_use_direct_match(args, cf, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
/* see if we can talk to something at address 0x8a */
|
||||
if (args->ia_addr != 0x8a)
|
||||
return 0;
|
||||
|
||||
iic_acquire_bus(args->ia_tag, 0);
|
||||
ret = iic_exec(args->ia_tag, I2C_OP_WRITE, args->ia_addr,
|
||||
out, 2, NULL, 0, 0);
|
||||
iic_release_bus(args->ia_tag, 0);
|
||||
|
||||
return (ret >= 0) ? I2C_MATCH_ADDRESS_AND_PROBE : 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: si70xx.c,v 1.3 2017/12/30 03:18:26 christos Exp $ */
|
||||
/* $NetBSD: si70xx.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2017 Brad Spencer <brad@anduin.eldar.org>
|
||||
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: si70xx.c,v 1.3 2017/12/30 03:18:26 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: si70xx.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
/*
|
||||
Driver for the Silicon Labs SI7013/SI7020/SI7021
|
||||
|
@ -563,21 +563,16 @@ si70xx_sysctl_init(struct si70xx_sc *sc)
|
|||
static int
|
||||
si70xx_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia;
|
||||
int error;
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int error, match_result;
|
||||
const bool matchdebug = false;
|
||||
|
||||
ia = aux;
|
||||
if (iic_use_direct_match(ia, match, NULL, &match_result))
|
||||
return match_result;
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* direct config - check name */
|
||||
if (strcmp(ia->ia_name, "si70xxtemp") != 0)
|
||||
return 0;
|
||||
} else {
|
||||
/* indirect config - check for configured address */
|
||||
if (ia->ia_addr != SI70XX_TYPICAL_ADDR)
|
||||
return 0;
|
||||
}
|
||||
/* indirect config - check for configured address */
|
||||
if (ia->ia_addr != SI70XX_TYPICAL_ADDR)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Check to see if something is really at this i2c address. This will
|
||||
|
@ -592,7 +587,7 @@ si70xx_match(device_t parent, cfdata_t match, void *aux)
|
|||
error = si70xx_poke(ia->ia_tag, ia->ia_addr, matchdebug);
|
||||
iic_release_bus(ia->ia_tag, 0);
|
||||
|
||||
return error == 0;
|
||||
return error == 0 ? I2C_MATCH_ADDRESS_AND_PROBE : 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: smscmon.c,v 1.2 2011/06/20 20:16:19 pgoyette Exp $ */
|
||||
/* $NetBSD: smscmon.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 Takahiro Hayashi
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: smscmon.c,v 1.2 2011/06/20 20:16:19 pgoyette Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: smscmon.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -183,7 +183,7 @@ smscmon_match(device_t parent, cfdata_t match, void *aux)
|
|||
}
|
||||
|
||||
iic_release_bus(ia->ia_tag, 0);
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: spdmem_i2c.c,v 1.14 2018/03/01 05:47:22 pgoyette Exp $ */
|
||||
/* $NetBSD: spdmem_i2c.c,v 1.15 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicolas Joly
|
||||
|
@ -40,7 +40,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: spdmem_i2c.c,v 1.14 2018/03/01 05:47:22 pgoyette Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: spdmem_i2c.c,v 1.15 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -178,6 +178,15 @@ spdmem_i2c_match(device_t parent, cfdata_t match, void *aux)
|
|||
struct i2c_attach_args *ia = aux;
|
||||
struct spdmem_i2c_softc sc;
|
||||
|
||||
/*
|
||||
* XXXJRT
|
||||
* Should do this with "compatible" strings. There are also
|
||||
* other problems with this "match" routine. Specifically, if
|
||||
* we are doing direct-config, we know the device is already
|
||||
* there aren't do need to probe. I'll leave the logic for
|
||||
* now and let someone who knows better clean it later.
|
||||
*/
|
||||
|
||||
if (ia->ia_name) {
|
||||
/* add other names as we find more firmware variations */
|
||||
if (strcmp(ia->ia_name, "dimm-spd") &&
|
||||
|
@ -201,7 +210,11 @@ spdmem_i2c_match(device_t parent, cfdata_t match, void *aux)
|
|||
if (spdmem_reset_page(&sc) != 0)
|
||||
return 0;
|
||||
|
||||
return spdmem_common_probe(&sc.sc_base);
|
||||
if (spdmem_common_probe(&sc.sc_base)) {
|
||||
return ia->ia_name ? I2C_MATCH_DIRECT_SPECIFIC
|
||||
: I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: sy8106a.c,v 1.1 2017/10/02 22:48:02 jmcneill Exp $ */
|
||||
/* $NetBSD: sy8106a.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2017 Jared McNeill <jmcneill@invisible.ca>
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: sy8106a.c,v 1.1 2017/10/02 22:48:02 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: sy8106a.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -185,11 +185,12 @@ static int
|
|||
sy8106a_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name == NULL)
|
||||
return 0;
|
||||
|
||||
return iic_compat_match(ia, compatible);
|
||||
if (iic_use_direct_match(ia, match, compatible, &match_result))
|
||||
return match_result;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: tcagpio.c,v 1.1 2017/09/22 18:12:31 jmcneill Exp $ */
|
||||
/* $NetBSD: tcagpio.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2017 Jared McNeill <jmcneill@invisible.ca>
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: tcagpio.c,v 1.1 2017/09/22 18:12:31 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: tcagpio.c,v 1.2 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -246,11 +246,12 @@ static int
|
|||
tcagpio_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name == NULL)
|
||||
return 0;
|
||||
if (iic_use_direct_match(ia, match, compatible, &match_result))
|
||||
return match_result;
|
||||
|
||||
return iic_compat_match(ia, compatible);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: tcakp.c,v 1.6 2018/04/30 20:33:09 jmcneill Exp $ */
|
||||
/* $NetBSD: tcakp.c,v 1.7 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2017 Jared McNeill <jmcneill@invisible.ca>
|
||||
|
@ -29,7 +29,7 @@
|
|||
#include "opt_fdt.h"
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: tcakp.c,v 1.6 2018/04/30 20:33:09 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: tcakp.c,v 1.7 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -316,13 +316,15 @@ static int
|
|||
tcakp_match(device_t parent, cfdata_t match, void *aux)
|
||||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
int match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
if (ia->ia_addr == 0x34)
|
||||
return 1;
|
||||
return 0;
|
||||
} else
|
||||
return iic_compat_match(ia, tcakp_compats);
|
||||
if (iic_use_direct_match(ia, match, tcakp_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
if (ia->ia_addr == 0x34)
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: titemp.c,v 1.4 2018/04/30 20:37:01 jmcneill Exp $ */
|
||||
/* $NetBSD: titemp.c,v 1.5 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2015 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: titemp.c,v 1.4 2018/04/30 20:37:01 jmcneill Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: titemp.c,v 1.5 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -94,25 +94,24 @@ titemp_match(device_t parent, cfdata_t match, void *aux)
|
|||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
uint8_t mfid;
|
||||
int error;
|
||||
int error, match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
if (ia->ia_addr != 0x4c)
|
||||
return 0;
|
||||
if (iic_use_direct_match(ia, match, titemp_compats, &match_result))
|
||||
return match_result;
|
||||
|
||||
if (ia->ia_addr != 0x4c)
|
||||
return 0;
|
||||
|
||||
if (iic_acquire_bus(ia->ia_tag, I2C_F_POLL) != 0)
|
||||
return 0;
|
||||
error = iic_smbus_read_byte(ia->ia_tag, ia->ia_addr,
|
||||
TITEMP_MFID_REG, &mfid, I2C_F_POLL);
|
||||
iic_release_bus(ia->ia_tag, I2C_F_POLL);
|
||||
if (iic_acquire_bus(ia->ia_tag, I2C_F_POLL) != 0)
|
||||
return 0;
|
||||
error = iic_smbus_read_byte(ia->ia_tag, ia->ia_addr,
|
||||
TITEMP_MFID_REG, &mfid, I2C_F_POLL);
|
||||
iic_release_bus(ia->ia_tag, I2C_F_POLL);
|
||||
|
||||
if (error || mfid != TITEMP_MFID_TMP451)
|
||||
return 0;
|
||||
if (error || mfid != TITEMP_MFID_TMP451)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
} else {
|
||||
return iic_compat_match(ia, titemp_compats);
|
||||
}
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: tps65217pmic.c,v 1.11 2016/10/15 14:40:41 kiyohara Exp $ */
|
||||
/* $NetBSD: tps65217pmic.c,v 1.12 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2013 The NetBSD Foundation, Inc.
|
||||
|
@ -35,7 +35,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: tps65217pmic.c,v 1.11 2016/10/15 14:40:41 kiyohara Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: tps65217pmic.c,v 1.12 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -280,10 +280,8 @@ tps65217pmic_match(device_t parent, cfdata_t cf, void *aux)
|
|||
/* we can only have one */
|
||||
if (matched)
|
||||
return 0;
|
||||
else
|
||||
matched = true;
|
||||
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -296,6 +294,9 @@ tps65217pmic_attach(device_t parent, device_t self, void *aux)
|
|||
prop_dictionary_t dict;
|
||||
int isel, fdim, brightness;
|
||||
|
||||
/* XXXJRT But what if you have multiple i2c busses? */
|
||||
matched = true;
|
||||
|
||||
sc->sc_dev = self;
|
||||
sc->sc_addr = ia->ia_addr;
|
||||
sc->sc_tag = ia->ia_tag;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: tps65950.c,v 1.5 2014/11/20 16:34:26 christos Exp $ */
|
||||
/* $NetBSD: tps65950.c,v 1.6 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2012 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -31,7 +31,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: tps65950.c,v 1.5 2014/11/20 16:34:26 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: tps65950.c,v 1.6 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -131,7 +131,7 @@ tps65950_match(device_t parent, cfdata_t match, void *aux)
|
|||
case TPS65950_ADDR_ID3:
|
||||
case TPS65950_ADDR_ID4:
|
||||
case TPS65950_ADDR_ID5:
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_ONLY;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: tsl256x.c,v 1.3 2018/06/07 05:54:23 thorpej Exp $ */
|
||||
/* $NetBSD: tsl256x.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2018 Jason R. Thorpe
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: tsl256x.c,v 1.3 2018/06/07 05:54:23 thorpej Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: tsl256x.c,v 1.4 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -110,38 +110,35 @@ tsllux_match(device_t parent, cfdata_t match, void *aux)
|
|||
{
|
||||
struct i2c_attach_args *ia = aux;
|
||||
uint8_t id_reg;
|
||||
int error;
|
||||
int error, match_result;
|
||||
|
||||
if (ia->ia_name == NULL) {
|
||||
switch (ia->ia_addr) {
|
||||
case TSL256x_SLAVEADDR_GND:
|
||||
case TSL256x_SLAVEADDR_FLOAT:
|
||||
case TSL256x_SLAVEADDR_VDD:
|
||||
break;
|
||||
if (iic_use_direct_match(ia, match, tsllux_compats, &match_result))
|
||||
return (match_result);
|
||||
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
switch (ia->ia_addr) {
|
||||
case TSL256x_SLAVEADDR_GND:
|
||||
case TSL256x_SLAVEADDR_FLOAT:
|
||||
case TSL256x_SLAVEADDR_VDD:
|
||||
break;
|
||||
|
||||
if (iic_acquire_bus(ia->ia_tag, I2C_F_POLL) != 0)
|
||||
return (0);
|
||||
error = iic_smbus_read_byte(ia->ia_tag, ia->ia_addr,
|
||||
TSL256x_REG_ID | COMMAND_CMD, &id_reg, I2C_F_POLL);
|
||||
iic_release_bus(ia->ia_tag, I2C_F_POLL);
|
||||
|
||||
if (error)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* XXX This loses if we have a 2560 rev. 0.
|
||||
*/
|
||||
if (id_reg == 0)
|
||||
return (0);
|
||||
|
||||
return (1);
|
||||
} else {
|
||||
return iic_compat_match(ia, tsllux_compats);
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (iic_acquire_bus(ia->ia_tag, I2C_F_POLL) != 0)
|
||||
return (0);
|
||||
error = iic_smbus_read_byte(ia->ia_tag, ia->ia_addr,
|
||||
TSL256x_REG_ID | COMMAND_CMD, &id_reg, I2C_F_POLL);
|
||||
iic_release_bus(ia->ia_tag, I2C_F_POLL);
|
||||
|
||||
if (error)
|
||||
return (0);
|
||||
|
||||
/* XXX This loses if we have a 2560 rev. 0. */
|
||||
if (id_reg == 0)
|
||||
return (I2C_MATCH_ADDRESS_ONLY);
|
||||
|
||||
return (I2C_MATCH_ADDRESS_AND_PROBE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -517,7 +514,7 @@ static int
|
|||
tsllux_write2(struct tsllux_softc *sc, uint8_t reg, uint16_t val)
|
||||
{
|
||||
reg = (reg & REGMASK) | COMMAND_CMD | COMMAND_WORD;
|
||||
return (iic_smbus_write_byte(sc->sc_i2c, sc->sc_addr, reg, val,
|
||||
return (iic_smbus_write_word(sc->sc_i2c, sc->sc_addr, reg, val,
|
||||
sc->sc_i2c_flags));
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: w83795g.c,v 1.2 2014/04/13 12:42:47 christos Exp $ */
|
||||
/* $NetBSD: w83795g.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013 Soren S. Jorvang. All rights reserved.
|
||||
|
@ -26,7 +26,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: w83795g.c,v 1.2 2014/04/13 12:42:47 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: w83795g.c,v 1.3 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -155,7 +155,7 @@ w83795g_match(device_t parent, cfdata_t match, void *aux)
|
|||
if ((bank & BANKSEL_HBACS && vend == VENDOR_NUVOTON_ID_HI) ||
|
||||
(~bank & BANKSEL_HBACS && vend == VENDOR_NUVOTON_ID_LO))
|
||||
if (chip == CHIP_W83795G && deva == DEVICEA_A)
|
||||
return 1;
|
||||
return I2C_MATCH_ADDRESS_AND_PROBE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: x1226.c,v 1.20 2017/10/28 04:53:55 riastradh Exp $ */
|
||||
/* $NetBSD: x1226.c,v 1.21 2018/06/16 21:22:13 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Shigeyuki Fukushima.
|
||||
|
@ -36,7 +36,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: x1226.c,v 1.20 2017/10/28 04:53:55 riastradh Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: x1226.c,v 1.21 2018/06/16 21:22:13 thorpej Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -103,7 +103,7 @@ xrtc_match(device_t parent, cfdata_t cf, void *arg)
|
|||
|
||||
/* match only this RTC devices */
|
||||
if (ia->ia_addr == X1226_ADDR)
|
||||
return (1);
|
||||
return (I2C_MATCH_ADDRESS_ONLY);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue