[i2c] Is review of AT91 patch pending?

David Brownell david-b at pacbell.net
Wed Oct 3 22:25:45 CEST 2007

> > > Do we really want to try fixing the i2c-at91 driver at all? David
> > > Brownell and Aras Vaichas seem to believe that there is no way that
> > > it can be made completely reliable due to hardware issues, and that
> > > using the generic i2c-gpio driver is the way to go on these systems.
> > 
> > Well, it's correct that the AT91 driver never will be 100% reliable (on 
> > AT91RM9200 that is). However, with my patch, support it's *WAY* more 
> > reliable than with the one already in mainline. If i2c-gpio is the way 
> > to go then the AT91 driver already present in the kernel should be 
> > removed too.
> That's what I meant, yes. Can someone please send me a patch either
> marking i2c-at91 as BROKEN with some explanations in Kconfig (if it's
> still worth improving), or plain removing it (if it's hopeless)?

I did the former.  I suspect that using the "internal address"
mechanism might be the path to having repeated start conditions
work, and know that on some systems the cpu costs for i2c-gpio
will argue for trying harder to make this driver work.

Atmel's "i2c-atmeltwi" driver is also IRQ-driven, and may be a
slightly better base to move forward with (for AT32 and AT91).
Same controller, meaning the same underlying problems, though...

- Dave

=======	CUT HERE
Mark the i2c-at91 driver BROKEN in Kconfig, and explain just
why it's broken.  (Summary:  hardware design issues.)

Signed-off-by: David Brownell <dbrownell at users.sourceforge.net>
 drivers/i2c/busses/Kconfig |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletion(-)

--- a/drivers/i2c/busses/Kconfig	2007-09-24 14:11:49.000000000 -0700
+++ b/drivers/i2c/busses/Kconfig	2007-10-03 13:15:09.000000000 -0700
@@ -75,11 +75,19 @@ config I2C_AMD8111
 config I2C_AT91
 	tristate "Atmel AT91 I2C Two-Wire interface (TWI)"
-	depends on ARCH_AT91 && EXPERIMENTAL
+	depends on ARCH_AT91 && EXPERIMENTAL && BROKEN
 	  This supports the use of the I2C interface on Atmel AT91
+	  This driver is BROKEN because the controller which it uses
+	  will easily trigger RX overrun and TX underrun errors.  Using
+	  low I2C clock rates may partially work around those issues
+	  on some systems.  Another serious problem is that there is no
+	  documented way to issue repeated START conditions, as needed
+	  to support combined I2C messages.  Use the i2c-gpio driver
+	  unless your system can cope with those limitations.
 config I2C_AU1550
 	tristate "Au1550/Au1200 SMBus interface"
 	depends on SOC_AU1550 || SOC_AU1200

More information about the i2c mailing list