Provide pre/post transfer method callbacks for icbbb
clients. These are helful when making certain drivers work on both Linux and FreeBSD without changing the code flow too much. Reviewed by: kib, wlosh MFC after: 1 month
This commit is contained in:
parent
24261e9a52
commit
daffabc4a9
@ -76,6 +76,7 @@ static int iicbb_stop(device_t);
|
||||
static int iicbb_write(device_t, const char *, int, int *, int);
|
||||
static int iicbb_read(device_t, char *, int, int *, int, int);
|
||||
static int iicbb_reset(device_t, u_char, u_char, u_char *);
|
||||
static int iicbb_transfer(device_t dev, struct iic_msg *msgs, uint32_t nmsgs);
|
||||
|
||||
static device_method_t iicbb_methods[] = {
|
||||
/* device interface */
|
||||
@ -95,7 +96,7 @@ static device_method_t iicbb_methods[] = {
|
||||
DEVMETHOD(iicbus_write, iicbb_write),
|
||||
DEVMETHOD(iicbus_read, iicbb_read),
|
||||
DEVMETHOD(iicbus_reset, iicbb_reset),
|
||||
DEVMETHOD(iicbus_transfer, iicbus_transfer_gen),
|
||||
DEVMETHOD(iicbus_transfer, iicbb_transfer),
|
||||
|
||||
{ 0, 0 }
|
||||
};
|
||||
@ -424,6 +425,21 @@ iicbb_read(device_t dev, char * buf, int len, int *read, int last, int delay)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
iicbb_transfer(device_t dev, struct iic_msg *msgs, uint32_t nmsgs)
|
||||
{
|
||||
int error;
|
||||
|
||||
error = IICBB_PRE_XFER(device_get_parent(dev));
|
||||
if (error)
|
||||
return (error);
|
||||
|
||||
error = iicbus_transfer_gen(dev, msgs, nmsgs);
|
||||
|
||||
IICBB_POST_XFER(device_get_parent(dev));
|
||||
return (error);
|
||||
}
|
||||
|
||||
DRIVER_MODULE(iicbus, iicbb, iicbus_driver, iicbus_devclass, 0, 0);
|
||||
|
||||
MODULE_DEPEND(iicbb, iicbus, IICBUS_MINVER, IICBUS_PREFVER, IICBUS_MAXVER);
|
||||
|
@ -30,6 +30,29 @@
|
||||
|
||||
INTERFACE iicbb;
|
||||
|
||||
#
|
||||
# Default implementation of optional methods
|
||||
#
|
||||
CODE {
|
||||
static int
|
||||
null_pre_xfer(device_t dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
null_post_xfer(device_t dev)
|
||||
|
||||
{
|
||||
}
|
||||
|
||||
static int
|
||||
null_callback(device_t dev, int index, caddr_t data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
#
|
||||
# iicbus callback
|
||||
#
|
||||
@ -37,7 +60,21 @@ METHOD int callback {
|
||||
device_t dev;
|
||||
int index;
|
||||
caddr_t data;
|
||||
};
|
||||
} DEFAULT null_callback;
|
||||
|
||||
#
|
||||
# Prepare device for I2C transfer
|
||||
#
|
||||
METHOD int pre_xfer {
|
||||
device_t dev;
|
||||
} DEFAULT null_pre_xfer;
|
||||
|
||||
#
|
||||
# Cleanup device after I2C transfer
|
||||
#
|
||||
METHOD void post_xfer {
|
||||
device_t dev;
|
||||
} DEFAULT null_post_xfer;
|
||||
|
||||
#
|
||||
# Set I2C bus data line
|
||||
|
Loading…
Reference in New Issue
Block a user