lkml.org 
[lkml]   [2020]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 33/62] i2c: rcar: in slave mode, clear NACK earlier
    Date
    From: Wolfram Sang <wsa+renesas@sang-engineering.com>

    [ Upstream commit 914a7b3563b8fb92f976619bbd0fa3a4a708baae ]

    Currently, a NACK in slave mode is set/cleared when SCL is held low by
    the IP core right before the bit is about to be pushed out. This is too
    late for clearing and then a NACK from the previous byte is still used
    for the current one. Now, let's clear the NACK right after we detected
    the STOP condition following the NACK.

    Fixes: de20d1857dd6 ("i2c: rcar: add slave support")
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/i2c/busses/i2c-rcar.c | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
    index ddfb08a3e6c20..00b3178c36a7a 100644
    --- a/drivers/i2c/busses/i2c-rcar.c
    +++ b/drivers/i2c/busses/i2c-rcar.c
    @@ -393,6 +393,7 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)
    /* master sent stop */
    if (ssr_filtered & SSR) {
    i2c_slave_event(priv->slave, I2C_SLAVE_STOP, &value);
    + rcar_i2c_write(priv, ICSCR, SIE | SDBS); /* clear our NACK */
    rcar_i2c_write(priv, ICSIER, SAR);
    rcar_i2c_write(priv, ICSSR, ~SSR & 0xff);
    }
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-01 19:21    [W:4.226 / U:0.708 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site