Re: [PATCH 1/2] i2c: omap: fix NACK and Arbitration Lost irq handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> Assuming this is really correct (I haven't tested), you need to add:

To help understanding logic, I'd like to provide event traces (with the patch applied):

See i2c-omap.c dc418f6e6a8f5021ccf9e9c0957eefae3737168d as a reference.
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/i2c/busses/i2c-omap.c?id=dc418f6e6a8f5021ccf9e9c0957eefae3737168d

Typical event sequence for Arbitration Lost case looks like:
addr: 0x0058, len: 4, flags: 0x1, stop: 1
omap_i2c_xfer_msg:564 (STAT=0x0140; IE=0x601f; CON=0x8200)
omap_i2c_xfer_msg:565 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
omap_i2c_xfer_msg:566 (STAT=0x0140; IE=0x601f; CON=0x8403)
omap_i2c_isr:886 (STAT=0x1141; IE=0x601f; CON=0x8000)
omap_i2c_isr_thread:906 (STAT=0x1141; IE=0x601f; CON=0x8000)
IRQ (ISR = 0x0001)
Arbitration lost

Typical event sequence for NACK case looks like:
addr: 0x0068, len: 4, flags: 0x1, stop: 1
omap_i2c_xfer_msg:564 (STAT=0x0040; IE=0x601f; CON=0x8000)
omap_i2c_xfer_msg:566 (STAT=0x0040; IE=0x601f; CON=0x8403)
omap_i2c_isr:886 (STAT=0x0146; IE=0x601f; CON=0x8000)
omap_i2c_isr_thread:906 (STAT=0x0146; IE=0x601f; CON=0x8000)
IRQ (ISR = 0x0006)
NACK
IRQ (ISR = 0x0004)
ARDY
omap_i2c_isr_thread:1030 (STAT=0x0140; IE=0x601f; CON=0x8000)

> 
> Fixes: 1d7afc9 i2c: omap: ack IRQ in parts
> Cc: <stable@xxxxxxxxxxxxxxx> # v3.7+
> 
> here and resend, so it gets backported to older kernels.
> 

I'll resend. Thanks.




--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux