summaryrefslogtreecommitdiffstats
path: root/drivers/i2c/busses/i2c-s3c2410.c
diff options
context:
space:
mode:
authorJon Povey <jon.povey@racelogic.co.uk>2010-09-17 12:02:11 +0900
committerBen Dooks <ben-linux@fluff.org>2010-09-28 00:05:08 +0100
commit4bba0fd8d1c6d405df666e2573e1a1f917098be0 (patch)
treeaf3128819f126fc9333e7883af04952badef6ee6 /drivers/i2c/busses/i2c-s3c2410.c
parentcc33e54290ed845904dac4b047934207738f0205 (diff)
downloadop-kernel-dev-4bba0fd8d1c6d405df666e2573e1a1f917098be0.zip
op-kernel-dev-4bba0fd8d1c6d405df666e2573e1a1f917098be0.tar.gz
i2c-davinci: Fix race when setting up for TX
When setting up to transmit, a race exists between the ISR and i2c_davinci_xfer_msg() trying to load the first byte and adjust counters. This is mostly visible for transmits > 1 byte long. The hardware starts sending immediately that MDR is loaded. IMR trickery doesn't work because if we start sending, finish the first byte and an XRDY event occurs before we load IMR to unmask it, we never get an interrupt, and we timeout. Move the MDR load after DXR,IMR loads to avoid this race without locking. Tested on DM355 connected to Techwell TW2836 and Wolfson WM8985 Signed-off-by: Jon Povey <jon.povey@racelogic.co.uk> Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Diffstat (limited to 'drivers/i2c/busses/i2c-s3c2410.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud