+ bcm2835_debug_add(i2c_dev, ~0);
}
- /*
-@@ -206,6 +289,7 @@ static irqreturn_t bcm2835_i2c_isr(int t
+ static void bcm2835_i2c_finish_transfer(struct bcm2835_i2c_dev *i2c_dev)
+@@ -215,6 +298,7 @@ static irqreturn_t bcm2835_i2c_isr(int t
u32 val, err;
val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S);
err = val & (BCM2835_I2C_S_CLKT | BCM2835_I2C_S_ERR);
if (err) {
-@@ -272,6 +356,13 @@ static int bcm2835_i2c_xfer(struct i2c_a
+@@ -281,6 +365,13 @@ static int bcm2835_i2c_xfer(struct i2c_a
unsigned long time_left;
int i, ret;
for (i = 0; i < (num - 1); i++)
if (msgs[i].flags & I2C_M_RD) {
dev_warn_once(i2c_dev->dev,
-@@ -291,6 +382,10 @@ static int bcm2835_i2c_xfer(struct i2c_a
-
+@@ -301,6 +392,11 @@ static int bcm2835_i2c_xfer(struct i2c_a
time_left = wait_for_completion_timeout(&i2c_dev->completion,
adap->timeout);
+
+ if (debug > 1 || (debug && (!time_left || i2c_dev->msg_err)))
+ bcm2835_debug_print(i2c_dev);
+ i2c_dev->debug_num_msgs = 0;
+ i2c_dev->debug_num = 0;
++
+ bcm2835_i2c_finish_transfer(i2c_dev);
+
if (!time_left) {
- bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C,
- BCM2835_I2C_C_CLEAR);
-@@ -301,7 +396,9 @@ static int bcm2835_i2c_xfer(struct i2c_a
+@@ -313,7 +409,9 @@ static int bcm2835_i2c_xfer(struct i2c_a
if (!i2c_dev->msg_err)
return num;