Date: Thu, 1 Mar 2012 20:58:21 +0000 (UTC) From: Alexander Kabaev <kan@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r232365 - head/sys/dev/iicbus Message-ID: <201203012058.q21KwLXZ096393@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kan Date: Thu Mar 1 20:58:20 2012 New Revision: 232365 URL: http://svn.freebsd.org/changeset/base/232365 Log: 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 Modified: head/sys/dev/iicbus/iicbb.c head/sys/dev/iicbus/iicbb_if.m Modified: head/sys/dev/iicbus/iicbb.c ============================================================================== --- head/sys/dev/iicbus/iicbb.c Thu Mar 1 20:45:17 2012 (r232364) +++ head/sys/dev/iicbus/iicbb.c Thu Mar 1 20:58:20 2012 (r232365) @@ -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 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); Modified: head/sys/dev/iicbus/iicbb_if.m ============================================================================== --- head/sys/dev/iicbus/iicbb_if.m Thu Mar 1 20:45:17 2012 (r232364) +++ head/sys/dev/iicbus/iicbb_if.m Thu Mar 1 20:58:20 2012 (r232365) @@ -31,13 +31,50 @@ 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 # 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203012058.q21KwLXZ096393>