Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 24 Jan 2016 18:54:12 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r294673 - stable/10/sys/dev/iicbus
Message-ID:  <201601241854.u0OIsCRs069976@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Sun Jan 24 18:54:11 2016
New Revision: 294673
URL: https://svnweb.freebsd.org/changeset/base/294673

Log:
  MFC r289726:
  
    Add iicbus_transfer_excl(), a helper routine to do an i2c bus transaction
    while holding exclusive ownership of the bus.  This is the routine most
    slave drivers should use unless they have a need to acquire and hold the
    bus across a series of related operations that involves multiple transfers.

Modified:
  stable/10/sys/dev/iicbus/iiconf.c
  stable/10/sys/dev/iicbus/iiconf.h

Modified: stable/10/sys/dev/iicbus/iiconf.c
==============================================================================
--- stable/10/sys/dev/iicbus/iiconf.c	Sun Jan 24 18:50:37 2016	(r294672)
+++ stable/10/sys/dev/iicbus/iiconf.c	Sun Jan 24 18:54:11 2016	(r294673)
@@ -395,6 +395,21 @@ iicbus_transfer(device_t bus, struct iic
 	return (IICBUS_TRANSFER(device_get_parent(bus), msgs, nmsgs));
 }
 
+int
+iicbus_transfer_excl(device_t dev, struct iic_msg *msgs, uint32_t nmsgs,
+    int how)
+{
+	device_t bus;
+	int error;
+
+	bus = device_get_parent(dev);
+	error = iicbus_request_bus(bus, dev, how);
+	if (error == 0)
+		error = IICBUS_TRANSFER(bus, msgs, nmsgs);
+	iicbus_release_bus(bus, dev);
+	return (error);
+}
+
 /*
  * Generic version of iicbus_transfer that calls the appropriate
  * routines to accomplish this.  See note above about acceptable

Modified: stable/10/sys/dev/iicbus/iiconf.h
==============================================================================
--- stable/10/sys/dev/iicbus/iiconf.h	Sun Jan 24 18:50:37 2016	(r294672)
+++ stable/10/sys/dev/iicbus/iiconf.h	Sun Jan 24 18:54:11 2016	(r294673)
@@ -129,6 +129,8 @@ extern int iicbus_block_read(device_t, u
 
 /* vectors of iic operations to pass to bridge */
 int iicbus_transfer(device_t bus, struct iic_msg *msgs, uint32_t nmsgs);
+int iicbus_transfer_excl(device_t bus, struct iic_msg *msgs, uint32_t nmsgs,
+    int how);
 int iicbus_transfer_gen(device_t bus, struct iic_msg *msgs, uint32_t nmsgs);
 
 #define IICBUS_MODVER	1



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201601241854.u0OIsCRs069976>