[PATCH] scx200_acb: Fix for the CS5535 errata
commit95563d343fec8d3e2f667c95230ac4ab7674b757
authorJordan Crouse <jordan.crouse@amd.com>
Fri, 28 Apr 2006 20:53:30 +0000 (28 22:53 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 9 May 2006 20:04:21 +0000 (9 13:04 -0700)
tree4e0c4f18ff45abe5f691f860633ed0a6bfbcd65b
parentb33d0798e6cfae1fcee75afc808fe5690a48a814
[PATCH] scx200_acb: Fix for the CS5535 errata

This is a fix for the CS5535 errata 111:

When the SMBus controller tries to access a non-existing device, it sets
the NEGACK bit, SMBus I/O offset 01h[4], to 1 after it detects no
acknowledge at the ninth clock.  The specification states that the bit
can be cleared by writing a 1 to it, but under certain circumstances it
is possible for this bit to not clear.

Writing a 0 to the bit resets the internal state machine and clears the
issue.

Since all writable bits in ACBST are W1C bits (write-one-to-clear) the
second write doesn't affect any other logic except the buggy NEGACK
state machine. The second write clears an internal register which is
responsible for "overwriting" the NEGACK bit in ACBST.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/i2c/busses/scx200_acb.c