[U-Boot] [PATCH RFC 0/4] ARMV7: OMAP: I2C driver: Restructure code to eliminate udelay calls and improve performance

Steve Sakoman steve at sakoman.com
Tue Oct 19 06:35:36 CEST 2010


I've been preparing a patch series for Beagle and Overo that detects expansion
board configuration information by reading a 128 byte I2C EEPROM on each
expansion board.

Using the OMAP I2C driver in its current form takes about 5-6 seconds to read
this small number of bytes!  Executing the i2c probe command takes close
to 10 seconds.

Examining the code I see that there are a large number of fairly long udelay calls
throughout the driver (10 - 50 milliseconds). I looked through the linux driver
and did not see equivalent delays in that code.  In fact the longest delay in the
linux code was one millisecond.

In looking at the TRM I2C section for OMAP3 and OMAP4 I don't see any requirement
for delays in the programming model description.

This patch restructures the i2c driver to eliminate most of the udelay calls
by monitoring state changes in the status register.

The EEPROM reads and the i2c probe execution are now instantaneous.

This patch series was tested on OMAP3 (Overo) and OMAP4 (Panda).  I do not
have access to OMAP2 hardware for testing.

Steve Sakoman (4):
  ARMV7: OMAP: I2C driver: Use same timeout value as linux kernel
    driver
  ARMV7: OMAP: I2C driver: Restructure i2c_read_byte function
  ARMV7: OMAP: I2C driver: Restructure i2c_write_byte function
  ARMV7: OMAP: I2C driver: Restructure i2c_probe function

 drivers/i2c/omap24xx_i2c.c |  204 ++++++++++++++++++++++++-------------------
 1 files changed, 114 insertions(+), 90 deletions(-)



More information about the U-Boot mailing list