Module Name:    src
Committed By:   jmcneill
Date:           Sun Oct  2 16:39:47 UTC 2011

Modified Files:
        src/distrib/sets/lists/comp: mi
        src/etc: MAKEDEV.tmpl
        src/share/man/man4: iic.4 options.4
        src/sys/arch/i386/conf: ALL
        src/sys/conf: majors
        src/sys/dev: Makefile
        src/sys/dev/i2c: files.i2c i2c.c
Added Files:
        src/sys/dev/i2c: Makefile

Log Message:
Install dev/i2c/i2c_io.h and implement the API in the iic(4) driver.
Obsolete the I2C_SCAN option as this can now be done from userland.


To generate a diff of this commit:
cvs rdiff -u -r1.1683 -r1.1684 src/distrib/sets/lists/comp/mi
cvs rdiff -u -r1.142 -r1.143 src/etc/MAKEDEV.tmpl
cvs rdiff -u -r1.8 -r1.9 src/share/man/man4/iic.4
cvs rdiff -u -r1.408 -r1.409 src/share/man/man4/options.4
cvs rdiff -u -r1.321 -r1.322 src/sys/arch/i386/conf/ALL
cvs rdiff -u -r1.56 -r1.57 src/sys/conf/majors
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/Makefile
cvs rdiff -u -r0 -r1.3 src/sys/dev/i2c/Makefile
cvs rdiff -u -r1.42 -r1.43 src/sys/dev/i2c/files.i2c
cvs rdiff -u -r1.30 -r1.31 src/sys/dev/i2c/i2c.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/comp/mi
diff -u src/distrib/sets/lists/comp/mi:1.1683 src/distrib/sets/lists/comp/mi:1.1684
--- src/distrib/sets/lists/comp/mi:1.1683	Fri Sep 30 22:08:18 2011
+++ src/distrib/sets/lists/comp/mi	Sun Oct  2 16:39:45 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: mi,v 1.1683 2011/09/30 22:08:18 jym Exp $
+#	$NetBSD: mi,v 1.1684 2011/10/02 16:39:45 jmcneill Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -282,6 +282,7 @@
 ./usr/include/dev/hpc/hpcfbio.h			comp-c-include
 ./usr/include/dev/i2c/i2c_bus.h			comp-obsolete		obsolete
 ./usr/include/dev/i2c/i2c_eeprom.h		comp-obsolete		obsolete
+./usr/include/dev/i2c/i2c_io.h			comp-c-include
 ./usr/include/dev/i2o/i2o.h			comp-c-include
 ./usr/include/dev/i2o/iopio.h			comp-c-include
 ./usr/include/dev/i2o/iopvar.h			comp-obsolete		obsolete

Index: src/etc/MAKEDEV.tmpl
diff -u src/etc/MAKEDEV.tmpl:1.142 src/etc/MAKEDEV.tmpl:1.143
--- src/etc/MAKEDEV.tmpl:1.142	Tue Sep  6 13:34:44 2011
+++ src/etc/MAKEDEV.tmpl	Sun Oct  2 16:39:46 2011
@@ -1,5 +1,5 @@
 #!/bin/sh -
-#	$NetBSD: MAKEDEV.tmpl,v 1.142 2011/09/06 13:34:44 apb Exp $
+#	$NetBSD: MAKEDEV.tmpl,v 1.143 2011/10/02 16:39:46 jmcneill Exp $
 #
 # Copyright (c) 2003,2007,2008 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -811,6 +811,10 @@ dtv)
 	makedev dtv0 dtv1 dtv2 dtv3
 	;;
 
+iic)
+	makedev iic0 iic1 iic2 iic3
+	;;
+
 altmem)
 	makedev altmem0 altmem1
 	;;
@@ -1417,6 +1421,12 @@ dtv[0-9]*)
 	mkdev dvb/adapter$unit/dvr0 c %dtv_chr% $(($unit + 32)) 666
 	;;
 
+iic[0-9]*)
+	unit=${i#iic}
+	: ${unit:-0}
+	mkdev iic$unit c %iic_chr% $unit 600
+	;;
+
 amr[0-9]*)
 	unit=${i#amr}
 	mkdev amr$unit c %amr_chr% $unit

Index: src/share/man/man4/iic.4
diff -u src/share/man/man4/iic.4:1.8 src/share/man/man4/iic.4:1.9
--- src/share/man/man4/iic.4:1.8	Tue Aug 30 07:44:37 2011
+++ src/share/man/man4/iic.4	Sun Oct  2 16:39:46 2011
@@ -1,4 +1,4 @@
-.\"	$NetBSD: iic.4,v 1.8 2011/08/30 07:44:37 mbalmer Exp $
+.\"	$NetBSD: iic.4,v 1.9 2011/10/02 16:39:46 jmcneill Exp $
 .\"	$OpenBSD: iic.4,v 1.74 2008/09/10 16:13:43 reyk Exp $
 .\"
 .\" Copyright (c) 2004, 2006 Alexander Yurchenko <gra...@openbsd.org>
@@ -16,7 +16,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd August 30, 2011
+.Dd October 2, 2011
 .Dt IIC 4
 .Os
 .Sh NAME
@@ -50,8 +50,6 @@
 .Cd "iic* at piixpm?              # amd64 i386 "
 .Cd "iic0 at slugiic0             # evbarm "
 .Cd "iic* at viapcib?             # i386 "
-.Pp
-.Cd "options I2C_SCAN"
 .Sh DESCRIPTION
 .Tn I2C
 is a two-wire bus developed by Philips used for connecting

Index: src/share/man/man4/options.4
diff -u src/share/man/man4/options.4:1.408 src/share/man/man4/options.4:1.409
--- src/share/man/man4/options.4:1.408	Fri Jun 17 18:13:49 2011
+++ src/share/man/man4/options.4	Sun Oct  2 16:39:46 2011
@@ -1,4 +1,4 @@
-.\"	$NetBSD: options.4,v 1.408 2011/06/17 18:13:49 wiz Exp $
+.\"	$NetBSD: options.4,v 1.409 2011/10/02 16:39:46 jmcneill Exp $
 .\"
 .\" Copyright (c) 1996
 .\" 	Perry E. Metzger.  All rights reserved.
@@ -30,7 +30,7 @@
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
 .\"
-.Dd June 17, 2011
+.Dd October 2, 2011
 .Dt OPTIONS 4
 .Os
 .Sh NAME
@@ -1494,19 +1494,6 @@ Support for
 Number of storage slots per file for
 .Xr fileassoc 9 .
 Default is 4.
-.It Cd options I2C_SCAN
-Scan each i2c bus to determine which addresses respond.
-.Pp
-.Em WARNING !
-Using this option can access some devices in such a
-manner as to leave them in an unstable or unuseable state, and
-can prevent those devices from being properly matched and/or
-attached.
-It can also lock up the entire
-.Xr iic 4
-bus and even prevent a machine from completing the boot process.
-Don't use this option unless you know what you're doing and can
-accept all sorts of unforeseen consequences.
 .El
 .Ss Networking Options
 .Bl -ohang

Index: src/sys/arch/i386/conf/ALL
diff -u src/sys/arch/i386/conf/ALL:1.321 src/sys/arch/i386/conf/ALL:1.322
--- src/sys/arch/i386/conf/ALL:1.321	Mon Sep 26 18:14:07 2011
+++ src/sys/arch/i386/conf/ALL	Sun Oct  2 16:39:47 2011
@@ -1,4 +1,4 @@
-# $NetBSD: ALL,v 1.321 2011/09/26 18:14:07 jakllsch Exp $
+# $NetBSD: ALL,v 1.322 2011/10/02 16:39:47 jmcneill Exp $
 # From NetBSD: GENERIC,v 1.787 2006/10/01 18:37:54 bouyer Exp
 #
 # ALL machine description file
@@ -17,7 +17,7 @@ include 	"arch/i386/conf/std.i386"
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"ALL-$Revision: 1.321 $"
+#ident 		"ALL-$Revision: 1.322 $"
 
 maxusers	64		# estimated number of users
 
@@ -254,7 +254,6 @@ options 	USBVERBOSE	# verbose USB device
 options 	PNPBIOSVERBOSE	# verbose PnP BIOS messages
 #options 	PNPBIOSDEBUG	# more fulsome PnP BIOS debugging messages
 options 	MCAVERBOSE	# verbose MCA device autoconfig messages
-options 	I2C_SCAN	# Scan i2c bus for responses
 
 options 	NFS_BOOT_DHCP,NFS_BOOT_BOOTPARAM
 

Index: src/sys/conf/majors
diff -u src/sys/conf/majors:1.56 src/sys/conf/majors:1.57
--- src/sys/conf/majors:1.56	Sat Jul  9 14:47:27 2011
+++ src/sys/conf/majors	Sun Oct  2 16:39:47 2011
@@ -1,4 +1,4 @@
-# $NetBSD: majors,v 1.56 2011/07/09 14:47:27 jmcneill Exp $
+# $NetBSD: majors,v 1.57 2011/10/02 16:39:47 jmcneill Exp $
 #
 # Device majors for Machine-Independent drivers.
 #
@@ -46,3 +46,4 @@ device-major rumpblk   char 197 block 19
 device-major npf       char 198		   npf
 device-major flash     char 199 block 199  flash
 device-major dtv       char 200            dtv
+device-major iic       char 201            iic

Index: src/sys/dev/Makefile
diff -u src/sys/dev/Makefile:1.31 src/sys/dev/Makefile:1.32
--- src/sys/dev/Makefile:1.31	Sat Jul  9 14:52:03 2011
+++ src/sys/dev/Makefile	Sun Oct  2 16:39:47 2011
@@ -1,6 +1,6 @@
-#	$NetBSD: Makefile,v 1.31 2011/07/09 14:52:03 jmcneill Exp $
+#	$NetBSD: Makefile,v 1.32 2011/10/02 16:39:47 jmcneill Exp $
 
-SUBDIR=	apm ata bluetooth dec dm dmover dtv hpc i2o ic ieee1394 ir isa \
+SUBDIR=	apm ata bluetooth dec dm dmover dtv hpc i2c i2o ic ieee1394 ir isa \
 	microcode ofw pci pckbport pcmcia pud putter raidframe sbus scsipi \
 	sun tc usb vme wscons
 

Index: src/sys/dev/i2c/files.i2c
diff -u src/sys/dev/i2c/files.i2c:1.42 src/sys/dev/i2c/files.i2c:1.43
--- src/sys/dev/i2c/files.i2c:1.42	Sat Aug 13 18:31:38 2011
+++ src/sys/dev/i2c/files.i2c	Sun Oct  2 16:39:47 2011
@@ -1,6 +1,6 @@
-#	$NetBSD: files.i2c,v 1.42 2011/08/13 18:31:38 jmcneill Exp $
+#	$NetBSD: files.i2c,v 1.43 2011/10/02 16:39:47 jmcneill Exp $
 
-defflag	opt_i2cbus.h				I2C_SCAN
+obsolete defflag	opt_i2cbus.h		I2C_SCAN
 define	i2cbus { }
 define	i2cexec
 

Index: src/sys/dev/i2c/i2c.c
diff -u src/sys/dev/i2c/i2c.c:1.30 src/sys/dev/i2c/i2c.c:1.31
--- src/sys/dev/i2c/i2c.c:1.30	Sun Oct  2 12:25:40 2011
+++ src/sys/dev/i2c/i2c.c	Sun Oct  2 16:39:47 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: i2c.c,v 1.30 2011/10/02 12:25:40 mbalmer Exp $	*/
+/*	$NetBSD: i2c.c,v 1.31 2011/10/02 16:39:47 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.30 2011/10/02 12:25:40 mbalmer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.31 2011/10/02 16:39:47 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -52,9 +52,6 @@ __KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.30
 #include <dev/i2c/i2cvar.h>
 
 #include "locators.h"
-#ifdef KERNEL_OPT
-#include <opt_i2cbus.h>
-#endif
 
 #define I2C_MAX_ADDR	0x3ff	/* 10-bit address, max */
 
@@ -64,6 +61,17 @@ struct iic_softc {
 	device_t sc_devices[I2C_MAX_ADDR + 1];
 };
 
+static dev_type_open(iic_open);
+static dev_type_close(iic_close);
+static dev_type_ioctl(iic_ioctl);
+
+const struct cdevsw iic_cdevsw = {
+	iic_open, iic_close, noread, nowrite, iic_ioctl,
+	nostop, notty, nopoll, nommap, nokqfilter, D_OTHER
+};
+
+extern struct cfdriver iic_cd;
+
 static void	iic_smbus_intr_thread(void *);
 static void	iic_fill_compat(struct i2c_attach_args*, const char*,
 			size_t, char **);
@@ -182,70 +190,6 @@ iic_attach(device_t parent, device_t sel
 	if (rv)
 		aprint_error_dev(self, "unable to create intr thread\n");
 
-#if I2C_SCAN
-	if (sc->sc_type == I2C_TYPE_SMBUS) {
-		int err;
-		int found = 0;
-		i2c_addr_t addr;
-		uint8_t val;
-
-		for (addr = 0x09; addr < 0x78; addr++) {
-			/*
-			 * Skip certain i2c addresses:
-			 *	0x00		General Call / START
-			 *	0x01		CBUS Address
-			 *	0x02		Different Bus format
-			 *	0x03 - 0x07	Reserved
-			 *	0x08		Host Address
-			 *	0x0c		Alert Response Address
-			 *	0x28		ACCESS.Bus host
-			 *	0x37		ACCESS.Bus default address
-			 *	0x48 - 0x4b	Prototypes
-			 *	0x61		Device Default Address
-			 *	0x78 - 0x7b	10-bit addresses
-			 *	0x7c - 0x7f	Reserved
-			 *
-			 * Some of these are skipped by judicious selection
-			 * of the range of the above for (;;) statement.
-			 *
-			 * if (addr <= 0x08 || addr >= 0x78)
-			 *	continue;
-			 */
-			if (addr == 0x0c || addr == 0x28 || addr == 0x37 ||
-			    addr == 0x61 || (addr & 0x7c) == 0x48)
-				continue;
-
-			iic_acquire_bus(ic, 0);
-			/*
-			 * Use SMBus quick_write command to detect most
-			 * addresses;  should avoid hanging the bus on
-			 * some write-only devices (like clocks that show
-			 * up at address 0x69)
-			 *
-			 * XXX The quick_write() is allegedly known to
-			 * XXX corrupt the Atmel AT24RF08 EEPROM found
-			 * XXX on some IBM Thinkpads!
-			 */
-			if ((addr & 0xf8) == 0x30 ||
-			    (addr & 0xf0) == 0x50)
-				err = iic_smbus_receive_byte(ic, addr, &val, 0);
-			else
-				err = iic_smbus_quick_write(ic, addr, 0);
-			if (err == 0) {
-				if (found == 0)
-					aprint_normal("%s: devices at",
-							ic->ic_devname);
-				found++;
-				aprint_normal(" 0x%02x", addr);
-			}
-			iic_release_bus(ic, 0);
-		}
-		if (found == 0)
-			aprint_normal("%s: no devices found", ic->ic_devname);
-		aprint_normal("\n");
-	}
-#endif
-
 	if (!pmf_device_register(self, NULL, NULL))
 		aprint_error_dev(self, "couldn't establish power handler\n");
 
@@ -459,6 +403,84 @@ iic_compat_match(struct i2c_attach_args 
 	return 0;
 }
 
+static int
+iic_open(dev_t dev, int flag, int fmt, lwp_t *l)
+{
+	struct iic_softc *sc = device_lookup_private(&iic_cd, minor(dev));
+
+	if (sc == NULL)
+		return ENXIO;
+
+	return 0;
+}
+
+static int
+iic_close(dev_t dev, int flag, int fmt, lwp_t *l)
+{
+	return 0;
+}
+
+static int
+iic_ioctl_exec(struct iic_softc *sc, i2c_ioctl_exec_t *iie)
+{
+	i2c_tag_t ic = sc->sc_tag;
+	uint8_t buf[I2C_EXEC_MAX_BUFLEN];
+	int error;
+	void *cmd;
+
+	/* Validate parameters */
+	if (iie->iie_addr > I2C_MAX_ADDR)
+		return EINVAL;
+	if (iie->iie_cmdlen > I2C_EXEC_MAX_CMDLEN ||
+	    iie->iie_buflen > I2C_EXEC_MAX_BUFLEN)
+		return EINVAL;
+	if (iie->iie_cmd != NULL && iie->iie_cmdlen == 0)
+		return EINVAL;
+	if (iie->iie_buf != NULL && iie->iie_buflen == 0)
+		return EINVAL;
+
+#if 0
+	/* Disallow userspace access to devices that have drivers attached. */
+	if (sc->sc_devices[iie->iie_addr] != NULL)
+		return EBUSY;
+#endif
+
+	if (iie->iie_cmd != NULL) {
+		error = copyin(iie->iie_cmd, cmd, iie->iie_cmdlen);
+		if (error)
+			return error;
+	}
+
+	iic_acquire_bus(ic, 0);
+	error = iic_exec(ic, iie->iie_op, iie->iie_addr, cmd, iie->iie_cmdlen,
+	    buf, iie->iie_buflen, 0);
+	iic_release_bus(ic, 0);
+
+	if (error)
+		return error;
+
+	if (iie->iie_buf)
+		error = copyout(buf, iie->iie_buf, iie->iie_buflen);
+
+	return error;
+}
+
+static int
+iic_ioctl(dev_t dev, u_long cmd, void *data, int flag, lwp_t *l)
+{
+	struct iic_softc *sc = device_lookup_private(&iic_cd, minor(dev));
+
+	if (sc == NULL)
+		return ENXIO;
+
+	switch (cmd) {
+	case I2C_IOCTL_EXEC:
+		return iic_ioctl_exec(sc, (i2c_ioctl_exec_t *)data);
+	default:
+		return ENODEV;
+	}
+}
+
 
 CFATTACH_DECL2_NEW(iic, sizeof(struct iic_softc),
     iic_match, iic_attach, NULL, NULL, iic_rescan, iic_child_detach);

Added files:

Index: src/sys/dev/i2c/Makefile
diff -u /dev/null src/sys/dev/i2c/Makefile:1.3
--- /dev/null	Sun Oct  2 16:39:47 2011
+++ src/sys/dev/i2c/Makefile	Sun Oct  2 16:39:47 2011
@@ -0,0 +1,6 @@
+# $NetBSD: Makefile,v 1.3 2011/10/02 16:39:47 jmcneill Exp $
+
+INCSDIR= /usr/include/dev/i2c
+INCS=	i2c_io.h
+
+.include <bsd.kinc.mk>

Reply via email to