mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-13 14:14:37 +00:00
i2c: iproc: handle only slave interrupts which are enabled
[ Upstream commit545f4011e1
] Handle only slave interrupts which are enabled. The IS_OFFSET register contains the interrupt status bits which will be set regardless of the enabling of the corresponding interrupt condition. One must therefore look at both IS_OFFSET and IE_OFFSET to determine whether an interrupt condition is set and enabled. Fixes:c245d94ed1
("i2c: iproc: Add multi byte read-write support for slave mode") Signed-off-by: Rayagonda Kokatanur <rayagonda.kokatanur@broadcom.com> Acked-by: Ray Jui <ray.jui@broadcom.com> Signed-off-by: Wolfram Sang <wsa@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
8b63c0cbc7
commit
d8a5e1780a
1 changed files with 9 additions and 4 deletions
|
@ -503,12 +503,17 @@ static void bcm_iproc_i2c_process_m_event(struct bcm_iproc_i2c_dev *iproc_i2c,
|
|||
static irqreturn_t bcm_iproc_i2c_isr(int irq, void *data)
|
||||
{
|
||||
struct bcm_iproc_i2c_dev *iproc_i2c = data;
|
||||
u32 status = iproc_i2c_rd_reg(iproc_i2c, IS_OFFSET);
|
||||
u32 slave_status;
|
||||
u32 status;
|
||||
bool ret;
|
||||
u32 sl_status = status & ISR_MASK_SLAVE;
|
||||
|
||||
if (sl_status) {
|
||||
ret = bcm_iproc_i2c_slave_isr(iproc_i2c, sl_status);
|
||||
status = iproc_i2c_rd_reg(iproc_i2c, IS_OFFSET);
|
||||
/* process only slave interrupt which are enabled */
|
||||
slave_status = status & iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET) &
|
||||
ISR_MASK_SLAVE;
|
||||
|
||||
if (slave_status) {
|
||||
ret = bcm_iproc_i2c_slave_isr(iproc_i2c, slave_status);
|
||||
if (ret)
|
||||
return IRQ_HANDLED;
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue