On Mon, Mar 26, 2012 at 02:55:24PM +0900, Tomoya MORINAGA wrote: > > Signed-off-by: Tomoya MORINAGA <tomoya.rohm@xxxxxxxxx> Woha, that's copy&paste code all over. May I ask to refactor this? Something like: rtn = pch_..._wait_for_checked_xfer(); if (rtn) return rtn; // All the things you have to do when rtn == 0 in that new function (the name was only a suugestion), you can do all the checks which are now copy-pasted, e.g.: 458 rtn = pch_i2c_wait_for_xfer_complete(adap); 459 if (rtn == 0) { 460 if (pch_i2c_getack(adap)) { 461 pch_dbg(adap, "Receive NACK for slave address" 462 "setting\n"); 463 return -EIO; 464 } 465 } else if (rtn == -EIO) { /* Arbitration Lost */ 466 pch_err(adap, "Lost Arbitration\n"); 467 pch_clrbit(adap->pch_base_address, PCH_I2CSR, I2CMAL_BIT); 468 pch_clrbit(adap->pch_base_address, PCH_I2CSR, I2CMIF_BIT); 469 pch_i2c_init(adap); 470 return -EAGAIN; 471 } else { /* wait-event timeout */ 472 pch_i2c_stop(adap); // Your current fixes added here 473 return -ETIME; 474 } return 0; It is only pseudo-code, but I think it can be done and will help the driver. Thanks, Wolfram > --- > drivers/i2c/busses/i2c-eg20t.c | 16 ++++++++++++++++ > 1 files changed, 16 insertions(+), 0 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-eg20t.c b/drivers/i2c/busses/i2c-eg20t.c > index d73975b..714b070 100644 > --- a/drivers/i2c/busses/i2c-eg20t.c > +++ b/drivers/i2c/busses/i2c-eg20t.c > @@ -445,7 +445,9 @@ 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 +471,9 @@ 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 +494,9 @@ 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 +604,9 @@ 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 +629,9 @@ 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 +658,9 @@ 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 +689,9 @@ 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 +712,9 @@ 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; > } > > -- > 1.7.7.6 > -- Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ |
Attachment:
signature.asc
Description: Digital signature