diff --git a/drivers/i2c/busses/i2c-msm-geni.c b/drivers/i2c/busses/i2c-msm-geni.c index ad91cbc45e3e..46114ad135d9 100644 --- a/drivers/i2c/busses/i2c-msm-geni.c +++ b/drivers/i2c/busses/i2c-msm-geni.c @@ -1113,8 +1113,14 @@ static int geni_i2c_xfer(struct i2c_adapter *adap, timeout = wait_for_completion_timeout(&gi2c->xfer, HZ); if (!timeout) { GENI_SE_ERR(gi2c->ipcl, true, gi2c->dev, - "Abort\n"); + "Cancel failed\n"); + reinit_completion(&gi2c->xfer); geni_abort_m_cmd(gi2c->base); + timeout = + wait_for_completion_timeout(&gi2c->xfer, HZ); + if (!timeout) + GENI_SE_ERR(gi2c->ipcl, true, gi2c->dev, + "Abort failed\n"); } } gi2c->cur_wr = 0;