Allow i2c addr wildcard matching. Use with care!

This commit is contained in:
soren 2013-08-07 19:38:45 +00:00
parent 5e1b939563
commit c5606116b4
9 changed files with 33 additions and 28 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: at24cxx.c,v 1.13 2013/02/08 15:14:11 jdc Exp $ */
/* $NetBSD: at24cxx.c,v 1.14 2013/08/07 19:38:45 soren Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: at24cxx.c,v 1.13 2013/02/08 15:14:11 jdc Exp $");
__KERNEL_RCSID(0, "$NetBSD: at24cxx.c,v 1.14 2013/08/07 19:38:45 soren Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -61,7 +61,7 @@ __KERNEL_RCSID(0, "$NetBSD: at24cxx.c,v 1.13 2013/02/08 15:14:11 jdc Exp $");
* larger than 512kb). Be sure to check the datasheet of your EEPROM
* because there's much variation between models.
*/
#define AT24CXX_ADDRMASK 0x78
#define AT24CXX_ADDRMASK 0x3f8
#define AT24CXX_ADDR 0x50
#define AT24CXX_WRITE_CYCLE_MS 10

View File

@ -1,4 +1,4 @@
/* $NetBSD: dbcool_reg.h,v 1.6 2011/03/11 18:38:52 pgoyette Exp $ */
/* $NetBSD: dbcool_reg.h,v 1.7 2013/08/07 19:38:45 soren Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@ -37,9 +37,9 @@
#define DBCOOLREG_H
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: dbcool_reg.h,v 1.6 2011/03/11 18:38:52 pgoyette Exp $");
__KERNEL_RCSID(0, "$NetBSD: dbcool_reg.h,v 1.7 2013/08/07 19:38:45 soren Exp $");
#define DBCOOL_ADDRMASK 0x7c
#define DBCOOL_ADDRMASK 0x3fc
#define DBCOOL_ADDR 0x2c /* Some chips have multiple addrs */
/* The dBCool chip family register set */

View File

@ -1,4 +1,4 @@
/* $NetBSD: i2c.c,v 1.39 2013/02/03 16:28:51 jdc Exp $ */
/* $NetBSD: i2c.c,v 1.40 2013/08/07 19:38:45 soren Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.39 2013/02/03 16:28:51 jdc Exp $");
__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.40 2013/08/07 19:38:45 soren Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -110,7 +110,6 @@ iic_search(device_t parent, cfdata_t cf, const int *ldesc, void *aux)
struct i2c_attach_args ia;
ia.ia_tag = sc->sc_tag;
ia.ia_addr = cf->cf_loc[IICCF_ADDR];
ia.ia_size = cf->cf_loc[IICCF_SIZE];
ia.ia_type = sc->sc_type;
@ -118,13 +117,19 @@ iic_search(device_t parent, cfdata_t cf, const int *ldesc, void *aux)
ia.ia_ncompat = 0;
ia.ia_compat = NULL;
if (ia.ia_addr != (i2c_addr_t)-1 &&
ia.ia_addr <= I2C_MAX_ADDR &&
!sc->sc_devices[ia.ia_addr])
if (config_match(parent, cf, &ia) > 0) {
for (ia.ia_addr = 0; ia.ia_addr <= I2C_MAX_ADDR; ia.ia_addr++) {
if (sc->sc_devices[ia.ia_addr] != NULL)
continue;
if (cf->cf_loc[IICCF_ADDR] != -1 &&
cf->cf_loc[IICCF_ADDR] != ia.ia_addr)
continue;
if (config_match(parent, cf, &ia) > 0)
sc->sc_devices[ia.ia_addr] =
config_attach(parent, cf, &ia, iic_print);
}
return 0;
}
@ -138,7 +143,7 @@ iic_child_detach(device_t parent, device_t child)
if (sc->sc_devices[i] == child) {
sc->sc_devices[i] = NULL;
break;
}
}
}
static int

View File

@ -1,4 +1,4 @@
/* $NetBSD: lm75reg.h,v 1.3 2006/05/17 00:10:54 kiyohara Exp $ */
/* $NetBSD: lm75reg.h,v 1.4 2013/08/07 19:38:45 soren Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@ -43,9 +43,9 @@
*
* 100 1xxx
*/
#define LM75_ADDRMASK 0x78
#define LM75_ADDRMASK 0x3f8
#define LM75_ADDR 0x48
#define LM77_ADDRMASK 0x7c
#define LM77_ADDRMASK 0x3fc
#define LM77_ADDR 0x48
/*

View File

@ -1,4 +1,4 @@
/* $NetBSD: max6900reg.h,v 1.2 2005/12/11 12:21:23 christos Exp $ */
/* $NetBSD: max6900reg.h,v 1.3 2013/08/07 19:38:45 soren Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@ -43,7 +43,7 @@
*
* 101 0000
*/
#define MAX6900_ADDRMASK 0x7f
#define MAX6900_ADDRMASK 0x3ff
#define MAX6900_ADDR 0x50
/*

View File

@ -1,4 +1,4 @@
/* $NetBSD: pcf8583reg.h,v 1.2 2005/12/11 12:21:23 christos Exp $ */
/* $NetBSD: pcf8583reg.h,v 1.3 2013/08/07 19:38:45 soren Exp $ */
/*
* Ben Harris, 2000
@ -20,7 +20,7 @@
*
* 101 0000
*/
#define PCF8583_ADDRMASK 0x7f
#define PCF8583_ADDRMASK 0x3ff
#define PCF8583_ADDR 0x50
#define PCF8583_REG_CSR 0x00

View File

@ -1,4 +1,4 @@
/* $NetBSD: sdtemp_reg.h,v 1.5 2010/07/12 03:39:05 pgoyette Exp $ */
/* $NetBSD: sdtemp_reg.h,v 1.6 2013/08/07 19:38:45 soren Exp $ */
/*
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@ -36,7 +36,7 @@
* Following definitions derived from JEDEC Standard 21-C section 4.7
* available at http://www.jedec.org/download/search/4_07R15.pdf
*/
#define SDTEMP_ADDRMASK 0x78
#define SDTEMP_ADDRMASK 0x3f8
#define SDTEMP_ADDR 0x18 /* I2C address 001 1xxx */
#define SDTEMP_REG_CAPABILITY 0x00

View File

@ -1,4 +1,4 @@
/* $NetBSD: spdmem_i2c.c,v 1.7 2013/07/28 06:12:45 kiyohara Exp $ */
/* $NetBSD: spdmem_i2c.c,v 1.8 2013/08/07 19:38:45 soren Exp $ */
/*
* Copyright (c) 2007 Nicolas Joly
@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: spdmem_i2c.c,v 1.7 2013/07/28 06:12:45 kiyohara Exp $");
__KERNEL_RCSID(0, "$NetBSD: spdmem_i2c.c,v 1.8 2013/08/07 19:38:45 soren Exp $");
#include <sys/param.h>
#include <sys/device.h>
@ -49,7 +49,7 @@ __KERNEL_RCSID(0, "$NetBSD: spdmem_i2c.c,v 1.7 2013/07/28 06:12:45 kiyohara Exp
#include <dev/ic/spdmemvar.h>
/* Constants for matching i2c bus address */
#define SPDMEM_I2C_ADDRMASK 0x78
#define SPDMEM_I2C_ADDRMASK 0x3f8
#define SPDMEM_I2C_ADDR 0x50
struct spdmem_i2c_softc {

View File

@ -1,4 +1,4 @@
/* $NetBSD: x1226reg.h,v 1.3 2005/12/11 12:21:23 christos Exp $ */
/* $NetBSD: x1226reg.h,v 1.4 2013/08/07 19:38:45 soren Exp $ */
/*
* Copyright (c) 2003 Shigeyuki Fukushima.
@ -47,7 +47,7 @@
*
* 110 1111
*/
#define X1226_ADDRMASK 0x7f
#define X1226_ADDRMASK 0x3ff
#define X1226_ADDR 0x6f
/* XICOR X1226 Device Identifier */