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>