On Thu, Jan 09, 2014 at 12:11:25PM +0100, Mike Looijmans wrote: > When a signal is caught while the i2c-davinci bus driver is transferring, > the drive just "abandons" the transfer and leaves the controller to fend > for itself. The next I2C transaction will find the controller in an > undefined state and often results in a stream of "initiating i2c bus recovery" > messages until the controller arrives in a defined state. This behaviour > also sends out "half" or possibly even mixed messages to I2C client > devices which may put them in an undesired state as well. > > This patch fixes this issue by always attempting to finish the current > transaction, and then check on a pending signal. It either reports > success if all data has been transferred, or it returns failure when > the transaction was aborted. This keeps the controller in a defined > state, and is also much friendlier towards client devices, because > it will only send complete messages. Even more, you should complete the whole transfer. There are devices where things can really go wrong if you send a half-complete command and then start with the next one. So, not checking signals at all is the way to go for I2C drivers. There is some cruft left, so I am happy about patches fixing that, with testing on real HW. Like yours here.
Attachment:
signature.asc
Description: Digital signature