android_kernel_samsung_msm8976/drivers
Jean Delvare 421ef47be2 [PATCH] i2c: SMBus PEC support rewrite, 2 of 3
This is my rewrite of the SMBus PEC support. The original
implementation was known to have bugs (credits go to Hideki Iwamoto
for reporting many of them recently), and was incomplete due to a
conceptual limitation.

The rewrite affects only software PEC. Hardware PEC needs very little
code and is mostly untouched.

Technically, both implementations differ in that the original one
was emulating PEC in software by modifying the contents of an
i2c_smbus_data union (changing the transaction to a different type),
while the new one works one level lower, on i2c_msg structures (working
on message contents). Due to the definition of the i2c_smbus_data union,
not all SMBus transactions could be handled (at least not without
changing the definition of this union, which would break user-space
compatibility), and those which could had to be implemented
individually. At the opposite, adding PEC to an i2c_msg structure
can be done on any SMBus transaction with common code.

Advantages of the new implementation:

* It's about twice as small (from ~136 lines before to ~70 now, only
  counting i2c-core, including blank and comment lines). The memory
  used by i2c-core is down by ~640 bytes (~3.5%).

* Easier to validate, less tricky code. The code being common to all
  transactions by design, the risk that a bug can stay uncovered is
  lower.

* All SMBus transactions have PEC support in I2C emulation mode
  (providing the non-PEC transaction is also implemented). Transactions
  which have no emulation code right now will get PEC support for free
  when they finally get implemented.

* Allows for code simplifications in header files and bus drivers
  (patch follows).

Drawbacks (I guess there had to be at least one):

* PEC emulation for non-PEC capable non-I2C SMBus masters was dropped.
  It was based on SMBus tricks and doesn't quite fit in the new design.
  I don't think it's really a problem, as the benefit was certainly
  not worth the additional complexity, but it's only fair that I at
  least mention it.

Lastly, let's note that the new implementation does slightly affect
compatibility (both in kernel and user-space), but doesn't actually
break it. Some defines will be dropped, but the code can always be
changed in a way that will work with both the old and the new
implementations. It shouldn't be a problem as there doesn't seem to be
many users of SMBus PEC to date anyway.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2005-10-28 14:02:14 -07:00
..
acorn
acpi [PATCH] `unaligned access' in acpi get_root_bridge_busnr() 2005-10-19 23:04:31 -07:00
atm [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
base [PATCH] kernel-doc: drivers/base fixes 2005-10-28 09:52:56 -07:00
block Merge ../bleed-2.6 2005-10-28 10:13:16 -07:00
bluetooth [Bluetooth] Ignore additional interfaces of BPA 100/105 devices 2005-10-28 19:20:57 +02:00
cdrom
char Merge ../bleed-2.6 2005-10-28 10:13:16 -07:00
connector [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
cpufreq [PATCH] cpufreq: SMP fix for conservative governor 2005-10-27 16:29:24 -07:00
crypto
dio
eisa
fc4
firmware [PATCH] dell_rbu: changes in packet update mechanism 2005-10-11 09:46:53 -07:00
hwmon [PATCH] hwmon: Static function fixes, 3 of 4 2005-10-28 14:02:13 -07:00
i2c [PATCH] i2c: SMBus PEC support rewrite, 2 of 3 2005-10-28 14:02:14 -07:00
ide [PATCH] Driver Core: fix up all callers of class_device_create() 2005-10-28 09:52:52 -07:00
ieee1394 Merge ../bleed-2.6 2005-10-28 10:13:16 -07:00
infiniband Merge ../bleed-2.6 2005-10-28 10:13:16 -07:00
input Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6 2005-10-28 13:09:47 -07:00
isdn [PATCH] Driver Core: fix up all callers of class_device_create() 2005-10-28 09:52:52 -07:00
macintosh [PATCH] Input: convert drivers/macintosh to dynamic input_dev allocation 2005-10-28 09:52:53 -07:00
mca
md [PATCH] gfp_t: remaining bits of drivers/* 2005-10-28 08:16:51 -07:00
media [PATCH] DRIVER MODEL: Get rid of the obsolete tri-level suspend/resume callbacks 2005-10-28 09:52:56 -07:00
message [PATCH] Driver Core: fix up all callers of class_device_create() 2005-10-28 09:52:52 -07:00
mfd [PATCH] DRIVER MODEL: Get rid of the obsolete tri-level suspend/resume callbacks 2005-10-28 09:52:56 -07:00
misc
mmc Merge ../bleed-2.6 2005-10-28 10:13:16 -07:00
mtd Merge ../bleed-2.6 2005-10-28 10:13:16 -07:00
net Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6 2005-10-28 13:09:47 -07:00
nubus
oprofile
parisc Auto-update from upstream 2005-10-28 12:18:07 -04:00
parport [PARISC] Convert parisc_device to use struct resource for hpa 2005-10-21 22:36:40 -04:00
pci [PATCH] DRIVER MODEL: Get rid of the obsolete tri-level suspend/resume callbacks 2005-10-28 09:52:56 -07:00
pcmcia Merge ../bleed-2.6 2005-10-28 10:13:16 -07:00
pnp
s390 Merge ../bleed-2.6 2005-10-28 10:13:16 -07:00
sbus
scsi Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6 2005-10-28 13:09:47 -07:00
serial Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6 2005-10-28 13:09:47 -07:00
sh
sn
tc
telephony
usb Merge ../bleed-2.6 2005-10-28 10:13:16 -07:00
video Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6 2005-10-28 13:09:47 -07:00
w1 [PATCH] Dallas's 1-wire bus compile error 2005-10-14 17:10:13 -07:00
zorro
Kconfig
Makefile