Date: Tue, 4 Mar 2014 18:27:01 +0000 (UTC) From: Jean-Sebastien Pedron <dumbbell@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r262745 - stable/9/sys/dev/iicbus Message-ID: <201403041827.s24IR1j0042137@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dumbbell Date: Tue Mar 4 18:27:00 2014 New Revision: 262745 URL: http://svnweb.freebsd.org/changeset/base/262745 Log: MFC r232365: 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 Approved by: kan@ Modified: stable/9/sys/dev/iicbus/iicbb.c stable/9/sys/dev/iicbus/iicbb_if.m Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/iicbus/iicbb.c ============================================================================== --- stable/9/sys/dev/iicbus/iicbb.c Tue Mar 4 17:12:06 2014 (r262744) +++ stable/9/sys/dev/iicbus/iicbb.c Tue Mar 4 18:27:00 2014 (r262745) @@ -75,6 +75,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 */ @@ -94,7 +95,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 } }; @@ -413,6 +414,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: stable/9/sys/dev/iicbus/iicbb_if.m ============================================================================== --- stable/9/sys/dev/iicbus/iicbb_if.m Tue Mar 4 17:12:06 2014 (r262744) +++ stable/9/sys/dev/iicbus/iicbb_if.m Tue Mar 4 18:27:00 2014 (r262745) @@ -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?201403041827.s24IR1j0042137>