lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 017/136] i2c: pxa: clear all master action bits in i2c_pxa_stop_message()
    Date
    From: Russell King <rmk+kernel@armlinux.org.uk>

    [ Upstream commit e81c979f4e071d516aa27cf5a0c3939da00dc1ca ]

    If we timeout during a message transfer, the control register may
    contain bits that cause an action to be set. Read-modify-writing the
    register leaving these bits set may trigger the hardware to attempt
    one of these actions unintentionally.

    Always clear these bits when cleaning up after a message or after
    a timeout.

    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/i2c/busses/i2c-pxa.c | 6 ++----
    1 file changed, 2 insertions(+), 4 deletions(-)

    diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
    index 600d264e080c5..ecc84aea51319 100644
    --- a/drivers/i2c/busses/i2c-pxa.c
    +++ b/drivers/i2c/busses/i2c-pxa.c
    @@ -709,11 +709,9 @@ static inline void i2c_pxa_stop_message(struct pxa_i2c *i2c)
    {
    u32 icr;

    - /*
    - * Clear the STOP and ACK flags
    - */
    + /* Clear the START, STOP, ACK, TB and MA flags */
    icr = readl(_ICR(i2c));
    - icr &= ~(ICR_STOP | ICR_ACKNAK);
    + icr &= ~(ICR_START | ICR_STOP | ICR_ACKNAK | ICR_TB | ICR_MA);
    writel(icr, _ICR(i2c));
    }

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 22:44    [W:3.004 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site