From 075269d47ca6a5c15f7f2bc1a3f2e737d7d251a2 Mon Sep 17 00:00:00 2001 From: Enrik Berkhan Date: Tue, 5 May 2009 08:39:25 +0200 Subject: [PATCH] --- yaml --- r: 144607 b: refs/heads/master c: 2196d1cf4afab93fb64c2e5b417096e49b661612 h: refs/heads/master i: 144605: 3e64ce4cdb34bd35009767c9abbf40dec270f208 144603: 944a6eb886bd8e40038ed796292715e5ca9d1ab2 144599: 992befc7ecde3a46411ca11f46e43de8b9287f3e 144591: 59f8a8a546813812c30eb37d794a85590f8cf4ea 144575: 5cac01f638025618f4286caac9c7c17978acd40d v: v3 --- [refs] | 2 +- trunk/drivers/i2c/algos/i2c-algo-pca.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 5a0c37c77a61..d9d70a756e57 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0cdba07bb23cdd3e0d64357ec3d983e6b75e541f +refs/heads/master: 2196d1cf4afab93fb64c2e5b417096e49b661612 diff --git a/trunk/drivers/i2c/algos/i2c-algo-pca.c b/trunk/drivers/i2c/algos/i2c-algo-pca.c index 6318f7ddc1d4..78d42aae0089 100644 --- a/trunk/drivers/i2c/algos/i2c-algo-pca.c +++ b/trunk/drivers/i2c/algos/i2c-algo-pca.c @@ -287,10 +287,21 @@ static int pca_xfer(struct i2c_adapter *i2c_adap, case 0x30: /* Data byte in I2CDAT has been transmitted; NOT ACK has been received */ DEB2("NOT ACK received after data byte\n"); + pca_stop(adap); goto out; case 0x38: /* Arbitration lost during SLA+W, SLA+R or data bytes */ DEB2("Arbitration lost\n"); + /* + * The PCA9564 data sheet (2006-09-01) says "A + * START condition will be transmitted when the + * bus becomes free (STOP or SCL and SDA high)" + * when the STA bit is set (p. 11). + * + * In case this won't work, try pca_reset() + * instead. + */ + pca_start(adap); goto out; case 0x58: /* Data byte has been received; NOT ACK has been returned */