lkml.org 
[lkml]   [2012]   [Apr]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2] i2c: tegra: Add delay before reset the controller
    Date
    NACK interrupt generated before I2C controller generates
    the STOP condition on bus. In Software, because of this
    reset of controller is happening before I2C controller could
    complete STOP condition. So wait for some time before resetting
    the controller so that STOP condition has delivered properly on bus.

    Added delay of 2 clock period before reset the
    controller in case of NACK error.

    Signed-off-by: Alok Chauhan <alokc@nvidia.com>
    ---
    Added the more descriptive commit message about issue in case
    of NACK error condition. Changed the comment in code also

    drivers/i2c/busses/i2c-tegra.c | 8 ++++++++
    1 files changed, 8 insertions(+), 0 deletions(-)

    diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
    index e978635..dfb850a8 100644
    --- a/drivers/i2c/busses/i2c-tegra.c
    +++ b/drivers/i2c/busses/i2c-tegra.c
    @@ -516,6 +516,14 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,
    if (likely(i2c_dev->msg_err == I2C_ERR_NONE))
    return 0;

    + /*
    + * NACK interrupt generated before I2C controller generates the STOP
    + * condition on bus. So wait for some time before reset the controller
    + * so that STOP condition has delivered properly on bus.
    + */
    + if (i2c_dev->msg_err == I2C_ERR_NO_ACK)
    + udelay(DIV_ROUND_UP(2 * 1000000, i2c_dev->bus_clk_rate));
    +
    tegra_i2c_init(i2c_dev);
    if (i2c_dev->msg_err == I2C_ERR_NO_ACK) {
    if (msg->flags & I2C_M_IGNORE_NAK)
    --
    1.7.4.1


    \
     
     \ /
      Last update: 2012-04-02 07:55    [W:0.026 / U:2.160 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site