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.
This commit is contained in:
parent
7f1636b75e
commit
4c1e5d32b2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=289726
@ -395,6 +395,21 @@ iicbus_transfer(device_t bus, struct iic_msg *msgs, uint32_t nmsgs)
|
||||
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
|
||||
|
@ -129,6 +129,8 @@ extern int iicbus_block_read(device_t, u_char, char *, int, int *);
|
||||
|
||||
/* 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
|
||||
|
Loading…
Reference in New Issue
Block a user