Message ID | 1434383399-2370-5-git-send-email-vaibhav.hiremath@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Vaibhav Hiremath <vaibhav.hiremath@linaro.org> writes: > In case of timeout during msg xfer assert reset to > i2c controller for both interrupt and PIO mode of operation. > > Signed-off-by: Jett.Zhou <jtzhou@marvell.com> > [vaibhav.hiremath@linaro.org: Split & merge patches into logical changes > and update the Changelog] > Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> I already said it previously, I'm against an unconditional reset in a timeout path. Make it a quirk or whatever, but in the current status, I'm against. The previous behavior looks correct to me : upon timeout, retry, no need to reset. -- Robert
On Friday 03 July 2015 08:57 PM, Robert Jarzmik wrote: > Vaibhav Hiremath <vaibhav.hiremath@linaro.org> writes: > >> In case of timeout during msg xfer assert reset to >> i2c controller for both interrupt and PIO mode of operation. >> >> Signed-off-by: Jett.Zhou <jtzhou@marvell.com> >> [vaibhav.hiremath@linaro.org: Split & merge patches into logical changes >> and update the Changelog] >> Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> > > I already said it previously, I'm against an unconditional reset in a timeout > path. Make it a quirk or whatever, but in the current status, I'm against. > > The previous behavior looks correct to me : upon timeout, retry, no need to > reset. > We still do return RETRY here, but also assert reset to I2C. Anyway, lets revisit this again later. I will remove it in my next version. Thanks, Vaibhav
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c index 632008f..edacfeb3 100644 --- a/drivers/i2c/busses/i2c-pxa.c +++ b/drivers/i2c/busses/i2c-pxa.c @@ -173,6 +173,8 @@ struct pxa_i2c { */ #define I2C_PXA_SLAVE_ADDR 0x1 +static void i2c_pxa_reset(struct pxa_i2c *i2c); + #ifdef DEBUG struct bits { @@ -750,6 +752,9 @@ out: ret = I2C_RETRY; } + if (ret < 0) + i2c_pxa_reset(i2c); + return ret; } @@ -816,6 +821,9 @@ static int i2c_pxa_do_xfer(struct pxa_i2c *i2c, struct i2c_msg *msg, int num) } out: + if (ret < 0) + i2c_pxa_reset(i2c); + return ret; }