summaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
authorTomoya MORINAGA <tomoya.rohm@gmail.com>2012-03-26 08:34:10 +0200
committerWolfram Sang <w.sang@pengutronix.de>2012-05-12 14:28:13 +0200
commit2761a81cee6874f73ebaa81f1a9e45147907c38b (patch)
treeae1e8331fb76557a1e5793a7a437a44c3b9a6528 /drivers/i2c
parenti2c-mpc: avoid I2C abnormal after resuming from deep sleep (diff)
downloadlinux-2761a81cee6874f73ebaa81f1a9e45147907c38b.tar.xz
linux-2761a81cee6874f73ebaa81f1a9e45147907c38b.zip
i2c-eg20t: Call init() when wait-event timeout occurs
Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-eg20t.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-eg20t.c b/drivers/i2c/busses/i2c-eg20t.c
index c811289b61e2..d6309e618cdc 100644
--- a/drivers/i2c/busses/i2c-eg20t.c
+++ b/drivers/i2c/busses/i2c-eg20t.c
@@ -445,7 +445,10 @@ static s32 pch_i2c_writebytes(struct i2c_adapter *i2c_adap,
pch_i2c_init(adap);
return -EAGAIN;
} else { /* wait-event timeout */
+ pch_err(adap, "%s(L.%d):wait-event timeout\n",
+ __func__, __LINE__);
pch_i2c_stop(adap);
+ pch_i2c_init(adap);
return -ETIME;
}
} else {
@@ -469,7 +472,10 @@ static s32 pch_i2c_writebytes(struct i2c_adapter *i2c_adap,
pch_i2c_init(adap);
return -EAGAIN;
} else { /* wait-event timeout */
+ pch_err(adap, "%s(L.%d):wait-event timeout\n",
+ __func__, __LINE__);
pch_i2c_stop(adap);
+ pch_i2c_init(adap);
return -ETIME;
}
@@ -490,7 +496,10 @@ static s32 pch_i2c_writebytes(struct i2c_adapter *i2c_adap,
pch_clrbit(adap->pch_base_address, PCH_I2CSR,
I2CMIF_BIT);
} else { /* wait-event timeout */
+ pch_err(adap, "%s(L.%d):wait-event timeout\n",
+ __func__, __LINE__);
pch_i2c_stop(adap);
+ pch_i2c_init(adap);
return -ETIME;
}
}
@@ -598,7 +607,10 @@ static s32 pch_i2c_readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
pch_i2c_init(adap);
return -EAGAIN;
} else { /* wait-event timeout */
+ pch_err(adap, "%s(L.%d):wait-event timeout\n",
+ __func__, __LINE__);
pch_i2c_stop(adap);
+ pch_i2c_init(adap);
return -ETIME;
}
pch_i2c_restart(adap);
@@ -621,7 +633,10 @@ static s32 pch_i2c_readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
pch_i2c_init(adap);
return -EAGAIN;
} else { /* wait-event timeout */
+ pch_err(adap, "%s(L.%d):wait-event timeout\n",
+ __func__, __LINE__);
pch_i2c_stop(adap);
+ pch_i2c_init(adap);
return -ETIME;
}
} else {
@@ -648,7 +663,10 @@ static s32 pch_i2c_readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
pch_i2c_init(adap);
return -EAGAIN;
} else { /* wait-event timeout */
+ pch_err(adap, "%s(L.%d):wait-event timeout\n",
+ __func__, __LINE__);
pch_i2c_stop(adap);
+ pch_i2c_init(adap);
return -ETIME;
}
@@ -677,7 +695,10 @@ static s32 pch_i2c_readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
return -EIO;
}
} else { /* wait-event timeout */
+ pch_err(adap, "%s(L.%d):wait-event timeout\n",
+ __func__, __LINE__);
pch_i2c_stop(adap);
+ pch_i2c_init(adap);
return -ETIME;
}
@@ -698,7 +719,10 @@ static s32 pch_i2c_readbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
return -EIO;
}
} else { /* wait-event timeout */
+ pch_err(adap, "%s(L.%d):wait-event timeout\n",
+ __func__, __LINE__);
pch_i2c_stop(adap);
+ pch_i2c_init(adap);
return -ETIME;
}