• Jae Hyun Yoo's avatar
    i2c: aspeed: Handle master/slave combined irq events properly · 3e9efc32
    Jae Hyun Yoo authored
    In most of cases, interrupt bits are set one by one but there are
    also a lot of other cases that Aspeed I2C IP sends multiple
    interrupt bits with combining master and slave events using a
    single interrupt call. It happens much more in multi-master
    environment than single-master. For an example, when master is
    waiting for a NORMAL_STOP interrupt in its MASTER_STOP state,
    SLAVE_MATCH and RX_DONE interrupts could come along with the
    NORMAL_STOP in case of an another master immediately sends data
    just after acquiring the bus. In this case, the NORMAL_STOP
    interrupt should be handled by master_irq and the SLAVE_MATCH and
    RX_DONE interrupts should be handled by slave_irq. This commit
    modifies irq hadling logic to handle the master/slave combined
    events properly.
    Signed-off-by: default avatarJae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
    Reviewed-by: default avatarBrendan Higgins <brendanhiggins@google.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    3e9efc32
i2c-aspeed.c 28 KB