i2c-eg20t: Call init() when wait-event timeout occurs
authorTomoya MORINAGA <tomoya.rohm@gmail.com>
Mon, 26 Mar 2012 06:34:10 +0000 (15:34 +0900)
committerWolfram Sang <w.sang@pengutronix.de>
Sat, 12 May 2012 12:28:13 +0000 (14:28 +0200)
Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
drivers/i2c/busses/i2c-eg20t.c

index c811289..d6309e6 100644 (file)
@@ -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;
                }