i2c:i2c-bfin-twi: TWI fails to restart next transfer in high system load.
authorSonic Zhang <sonic.zhang@analog.com>
Wed, 13 Jun 2012 08:22:44 +0000 (16:22 +0800)
committerWolfram Sang <w.sang@pengutronix.de>
Fri, 13 Jul 2012 06:37:04 +0000 (08:37 +0200)
commit28a377c79af918fc40c70553216571314c5f42a4
treea84d58d7b4870d3acae9989af9102784fef08808
parent2ee74eb95cf36b1a69e483f9ba2191bd8022b2c1
i2c:i2c-bfin-twi: TWI fails to restart next transfer in high system load.

Current driver was developed based on BF537 0.2 HRM. In high system load, BUFRDERR error
interrupt may be raised if XMTSERV interrupt of last TX byte is not served in time
(set RSTART bit), which breaks restart tranfer as expected.

"Buffer Read Error (BUFRDERR)" description in Blackfin HRM only applys to BF537
rev. < 0.3. In later rev. and later announced Blackfin chips, such as BF527 and
BF548, a new TWI master feature "Clock Stretching" is added into the TWI controller,
BUFRDERR interrupt is not triggered after TX FIFO is empty.

This patch sets RSTART bit at the beginning of the first transfer. The SCL and SDA
is hold till XMTSERV interrupt of last TX byte is served. Restart transfer is not broken
in high system load.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
[wsa: fixed spaces around operators]

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
drivers/i2c/busses/i2c-bfin-twi.c