svn commit: r289726 - head/sys/dev/iicbus
Ian Lepore
ian at FreeBSD.org
Thu Oct 22 00:55:01 UTC 2015
Author: ian
Date: Thu Oct 22 00:54:59 2015
New Revision: 289726
URL: https://svnweb.freebsd.org/changeset/base/289726
Log:
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:
head/sys/dev/iicbus/iiconf.c
head/sys/dev/iicbus/iiconf.h
Modified: head/sys/dev/iicbus/iiconf.c
==============================================================================
--- head/sys/dev/iicbus/iiconf.c Thu Oct 22 00:07:48 2015 (r289725)
+++ head/sys/dev/iicbus/iiconf.c Thu Oct 22 00:54:59 2015 (r289726)
@@ -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: head/sys/dev/iicbus/iiconf.h
==============================================================================
--- head/sys/dev/iicbus/iiconf.h Thu Oct 22 00:07:48 2015 (r289725)
+++ head/sys/dev/iicbus/iiconf.h Thu Oct 22 00:54:59 2015 (r289726)
@@ -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
More information about the svn-src-all
mailing list