linux/drivers/i2c
Jean Delvare 424ed67c7d i2c-algo-bit: Implement a 50/50 SCL duty cycle
The original i2c-algo-bit implementation uses a 33/66 SCL duty cycle
when bits are being written on the bus. While the I2C specification
doesn't forbid it, this prevents us from driving the I2C bus to its
max speed, limiting us to 66 kbps max on standard I2C busses.

Implementing a 50/50 duty cycle instead lets us max out the bandwidth
up to the theoretical max of 100 kbps on standard I2C busses. This is
particularly important when large amounts of data need to be transfered
over the bus, as is the case with some TV adapters when the firmware is
being uploaded.

In fact this change even allows, at least in theory, fast-mode I2C
support at 125, 166 and 250 kbps. There's no way to reach the
theoretical max of 400 kbps with this implementation. But I don't
think we want to put efforts in that direction anyway: software-driven
I2C is very CPU-intensive and bad for latency.

Other timing changes:
* Don't set SDA high explicitly on error, we're going to issue a stop
  condition before we leave anyway.
* If an error occurs when sending the slave address, yield the CPU
  before retrying, and remove the additional delay after the new start
  condition.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
2007-05-01 23:26:33 +02:00
..
algos i2c-algo-bit: Implement a 50/50 SCL duty cycle 2007-05-01 23:26:33 +02:00
busses i2c-omap: Switch to static adapter numbering 2007-05-01 23:26:32 +02:00
chips i2c/ds1374: Check workqueue creation status 2007-03-22 19:49:01 +01:00
i2c-boardinfo.c i2c: Add i2c_board_info and i2c_new_device() 2007-05-01 23:26:31 +02:00
i2c-core.c i2c: Make i2c_del_driver a void function 2007-05-01 23:26:32 +02:00
i2c-core.h i2c: Add i2c_board_info and i2c_new_device() 2007-05-01 23:26:31 +02:00
i2c-dev.c [PATCH] mark struct file_operations const 3 2007-02-12 09:48:45 -08:00
Kconfig i2c: Add i2c_board_info and i2c_new_device() 2007-05-01 23:26:31 +02:00
Makefile i2c: Add i2c_board_info and i2c_new_device() 2007-05-01 23:26:31 +02:00