i2c: tegra: fix unknown interrupt issue after ARB lost
authorShardar Shariff Md <smohammed@nvidia.com>
Mon, 9 Nov 2015 05:50:03 +0000 (10:50 +0530)
committermobile promotions <svcmobile_promotions@nvidia.com>
Tue, 26 Jul 2016 23:05:57 +0000 (16:05 -0700)
commitea4f6a73d5c01d05070bdaa6df4ce8b0c7326bad
tree1d2de501fd8019fa6ebc9557b8bee53fcf86c6f8
parent57127ec8fbdb77a946e3f362c172f6d2aa53fa23
i2c: tegra: fix unknown interrupt issue after ARB lost

For i2c transaction with repeat start (We post 7W [header + data
for Write followed by read in FIFO]) and unmask required interrupts.
But HW starts processing if there are atleast 3W in FIFO and during
this time if ARB lost error occurs then current data in FIFO is cleared
and chance of posting remaining data after FIFO is cleared. Now
SW handles the ARB lost error as interrupts are enabled later after
posting all packets and after clearing the ARB lost interrupt the
packet mode is disabled(Normal mode), which causes the Normal mode
interrupt(Unknown interrupt in case of packet mode) due to stale
data in fifo.

- To fix this, enable (unmask) error interrupt before posting the
packets into FIFO and clear the packet mode disable before clearing
ARB lost error also for other errors(NACK/FIFO overflow).

- Dont issue bus clear for ARB lost error if bus is operating in
multimaster mode.

Bug 200151590
Bug 200151064

Change-Id: I20d19a25aee400dd0a6517bdcaf87e2c84b0770a
Signed-off-by: Shardar Shariff Md <smohammed@nvidia.com>
Reviewed-on: http://git-master/r/842348
(cherry picked from commit 7c8f33dec55fc63286acb35bee3f175f2f989189)
Reviewed-on: http://git-master/r/1190656
GVS: Gerrit_Virtual_Submit
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
drivers/i2c/busses/i2c-tegra.c