From ac25f132843e78b7fe30f9e0c3ede75ed0f19a46 Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Sat, 13 Mar 2010 20:56:56 +0100 Subject: [PATCH] --- yaml --- r: 188031 b: refs/heads/master c: 0a9c14751377a1407f5e35791e13651d2fc7801c h: refs/heads/master i: 188029: 6b3cf4218ca3124df4731e945f80540b42ca914a 188027: 9438bb4380a6b07d9dd6ea35a83eab7b5512fac9 188023: 91115d255528d1f87cc732603e5abe1fe4d58213 188015: 03813872651470018852a1508de06a9774e2d8e7 187999: 4aaf7e747b34ae51de5fd04dd8661bca7283bd2a 187967: 4d4a89995c1d70b56216f1383d0120f2f57be751 187903: 163ff86523f3fec701a42ac24e9ed86ecbdbfee3 v: v3 --- [refs] | 2 +- trunk/drivers/i2c/algos/i2c-algo-bit.c | 9 +++++++++ trunk/include/linux/i2c-algo-bit.h | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 510f73510014..d80a68d3b58f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d07b56b3098b9f32ae6dedeacbc594bd01dcfcd1 +refs/heads/master: 0a9c14751377a1407f5e35791e13651d2fc7801c diff --git a/trunk/drivers/i2c/algos/i2c-algo-bit.c b/trunk/drivers/i2c/algos/i2c-algo-bit.c index e25e13980af3..e8d568c3fb09 100644 --- a/trunk/drivers/i2c/algos/i2c-algo-bit.c +++ b/trunk/drivers/i2c/algos/i2c-algo-bit.c @@ -522,6 +522,12 @@ static int bit_xfer(struct i2c_adapter *i2c_adap, int i, ret; unsigned short nak_ok; + if (adap->pre_xfer) { + ret = adap->pre_xfer(i2c_adap); + if (ret < 0) + return ret; + } + bit_dbg(3, &i2c_adap->dev, "emitting start condition\n"); i2c_start(adap); for (i = 0; i < num; i++) { @@ -570,6 +576,9 @@ static int bit_xfer(struct i2c_adapter *i2c_adap, bailout: bit_dbg(3, &i2c_adap->dev, "emitting stop condition\n"); i2c_stop(adap); + + if (adap->post_xfer) + adap->post_xfer(i2c_adap); return ret; } diff --git a/trunk/include/linux/i2c-algo-bit.h b/trunk/include/linux/i2c-algo-bit.h index 111334f5b922..4f98148c11c3 100644 --- a/trunk/include/linux/i2c-algo-bit.h +++ b/trunk/include/linux/i2c-algo-bit.h @@ -36,6 +36,8 @@ struct i2c_algo_bit_data { void (*setscl) (void *data, int state); int (*getsda) (void *data); int (*getscl) (void *data); + int (*pre_xfer) (struct i2c_adapter *); + void (*post_xfer) (struct i2c_adapter *); /* local settings */ int udelay; /* half clock cycle time in us,