lkml.org 
[lkml]   [2022]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 4/4] i2c: aspeed: Assert NAK when slave is busy
    Date
    When processing I2C_SLAVE_WRITE_REQUESTED event, if slave returns
    -EBUSY, i2c controller should issue RxCmdLast command to assert NAK
    on the bus.

    Signed-off-by: Quan Nguyen <quan@os.amperecomputing.com>
    ---
    v6:
    + New introduced in v6 [Quan]

    drivers/i2c/busses/i2c-aspeed.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
    index 771e53d3d197..ebc2b92656c8 100644
    --- a/drivers/i2c/busses/i2c-aspeed.c
    +++ b/drivers/i2c/busses/i2c-aspeed.c
    @@ -244,6 +244,7 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
    u32 command, irq_handled = 0;
    struct i2c_client *slave = bus->slave;
    u8 value;
    + int ret;

    if (!slave)
    return 0;
    @@ -311,7 +312,9 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
    break;
    case ASPEED_I2C_SLAVE_WRITE_REQUESTED:
    bus->slave_state = ASPEED_I2C_SLAVE_WRITE_RECEIVED;
    - i2c_slave_event(slave, I2C_SLAVE_WRITE_REQUESTED, &value);
    + ret = i2c_slave_event(slave, I2C_SLAVE_WRITE_REQUESTED, &value);
    + if (ret == -EBUSY)
    + writel(ASPEED_I2CD_M_S_RX_CMD_LAST, bus->base + ASPEED_I2C_CMD_REG);
    break;
    case ASPEED_I2C_SLAVE_WRITE_RECEIVED:
    i2c_slave_event(slave, I2C_SLAVE_WRITE_RECEIVED, &value);
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-03-10 12:43    [W:4.730 / U:0.384 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site