1
linux/drivers/i2c
Shinya Kuribayashi d60c7e81dd i2c-designware: Improved _HCNT/_LCNT calculation
* Calculate with accurate conditional expressions from DW manuals.
* Round ic_clk by adding 0.5 as it's important at high ic_clk rate.
* Take into account "tHD;STA" issue for _HCNT calculation.
* Take into account "tf" for _LCNT calculation.
* Add "cond" and "offset" fot further correction requirements.

For _HCNT calculation, there's one issue needs to be carefully
considered; DesignWare I2C core doesn't seem to have solid strategy
to meet the tHD;STA timing spec.  If you configure _HCNT based on the
tHIGH timing spec, it easily results in violation of the tHD;STA spec.

After many trials, we came to the conclusion that the tHD;STA period
is proportional to (_HCNT + 3).  For the safety's sake, this should be
selected by default.

As for _LCNT calculation, DW I2C core has one characteristic behavior;
he starts counting the SCL CNTs for the LOW period of the SCL clock
(tLOW) as soon as it pulls the SCL line.  At that time, he doesn't take
into account the fall time of SCL signal (tf), IOW, he starts counting
CNTs without confirming the SCL input voltage has dropped to below VIL.

This characteristics becomes a problem on some platforms where tf is
considerably long, and results in violation of the tLOW timing spec.

To make the driver configurable as much as possible for various cases,
we'd have separated arguments "tf" and "offset", and for safety default
values should be 0.3 us and 0, respectively.

Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
Acked-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
2009-12-09 00:19:10 +00:00
..
algos i2c-algo-pca: Let PCA9564 recover from unacked data byte (state 0x30) 2009-05-05 08:39:25 +02:00
busses i2c-designware: Improved _HCNT/_LCNT calculation 2009-12-09 00:19:10 +00:00
chips i2c/chips: Move ds1682 to drivers/misc 2009-12-06 17:06:16 +01:00
i2c-boardinfo.c i2c: Use rwsem instead of mutex for board info 2009-06-19 16:58:20 +02:00
i2c-core.c i2c: Refactor for_each callbacks 2009-12-06 17:06:27 +01:00
i2c-core.h i2c: Use rwsem instead of mutex for board info 2009-06-19 16:58:20 +02:00
i2c-dev.c i2c: Remove big kernel lock from i2cdev_open 2009-12-06 17:06:26 +01:00
Kconfig i2c: Prevent priority inversion on top of bus lock 2009-12-06 17:06:22 +01:00
Makefile