1
linux/drivers/i2c/busses
Albrecht Dreß 0c2daaafcd powerpc/5200/i2c: improve i2c bus error recovery
This patch improves the recovery of the MPC's I2C bus from errors like bus
hangs resulting in timeouts:
1. make the bus timeout configurable, as it depends on the bus clock and
    the attached slave chip(s); default is still 1 second;
2. detect any of the cases indicated by the CF, BB and RXAK MSR flags if a
    timeout occurs, and add a missing (required) MAL reset;
3. use a more reliable method to fixup the bus if a hang has been detected.
    The sequence is sent 9 times which seems to be necessary if a slave
    "misses" more than one clock cycle.  For 400 kHz bus speed, the fixup is
    also ~70us (81us vs. 150us) faster.

Tested on a custom Lite5200b derived board, with a Dallas RTC, AD sensors
and NXP IO expander chips attached to the i2c.

Changes vs. v1:
- use improved bus fixup sequence for all chips (not only the 5200)
- calculate real clock from defaults if no clock is given in the device tree
- better description (I hope) of the changes.

I didn't split the changes in this file into three parts as recommended by
Grant, as they actually belong together (i.e. they address one single
problem, just in three places of one single source file).

Signed-off-by: Albrecht Dreß <albrecht.dress@arcor.de>
[grant.likely@secretlab.ca: fixup for ->node to ->dev.of_node transition]
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
2010-08-01 17:06:44 -06:00
..
i2c-acorn.c [ARM] acorn,ebsa110,footbridge,integrator,sa1100: Convert asm/io.h to linux/io.h 2009-03-25 10:21:35 +00:00
i2c-ali15x3.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-ali1535.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-ali1563.c i2c: Make PCI device ids constant 2010-03-02 12:23:37 +01:00
i2c-amd756-s4882.c i2c: Use snprintf to set adapter names 2009-01-07 14:29:18 +01:00
i2c-amd756.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-amd8111.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-at91.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-au1550.c i2c: Use resource_size macro 2009-06-16 22:42:16 +01:00
i2c-bfin-twi.c i2c-bfin-twi: return completion in interrupt for smbus quick transfers 2010-05-20 00:18:58 +01:00
i2c-cpm.c Merge remote branch 'origin' into secretlab/next-devicetree 2010-05-22 00:36:56 -06:00
i2c-davinci.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
i2c-designware.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
i2c-elektor.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-gpio.c i2c-gpio: Move initialization code to subsys_initcall() 2010-05-21 18:40:58 +02:00
i2c-highlander.c i2c-highlander: remover superflous variable 2010-05-20 00:19:01 +01:00
i2c-hydra.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-i801.c hwmon: Fix autoloading of fschmd on recent Fujitsu machines 2010-07-09 16:22:51 +02:00
i2c-ibm_iic.c Merge remote branch 'origin' into secretlab/next-devicetree 2010-05-22 00:36:56 -06:00
i2c-ibm_iic.h
i2c-imx.c i2c-imx: fix error handling 2010-04-20 01:16:57 +01:00
i2c-iop3xx.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-iop3xx.h
i2c-isch.c i2c: convert i2c-isch to platform_device 2010-03-07 22:17:36 +01:00
i2c-ixp2000.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
i2c-mpc.c powerpc/5200/i2c: improve i2c bus error recovery 2010-08-01 17:06:44 -06:00
i2c-mv64xxx.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-nforce2-s4985.c
i2c-nforce2.c i2c-nforce2: Remove redundant error messages on ACPI conflict 2010-05-21 18:41:01 +02:00
i2c-nomadik.c i2c-nomadik: fix operator precedence warning 2010-05-20 00:19:00 +01:00
i2c-ocores.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-octeon.c I2C: Fix section mismatch errors in i2c-octeon.c 2010-04-30 20:52:52 +01:00
i2c-omap.c OMAP3: I2C: Clean up Errata 1p153 handling 2010-05-20 00:19:00 +01:00
i2c-parport-light.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-parport.c i2c-parport: Make template structure const 2010-05-21 18:40:57 +02:00
i2c-parport.h i2c-parport: Add SMBus alert support 2010-03-02 12:23:44 +01:00
i2c-pasemi.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-pca-isa.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-pca-platform.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-piix4.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-pmcmsp.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-pnx.c i2c-pnx: Add stop conditions for end of transfer 2010-04-20 01:16:57 +01:00
i2c-powermac.c i2c-powermac: Be less verbose in the absence of real errors. 2010-03-13 20:56:52 +01:00
i2c-pxa.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-s3c2410.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-s6000.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-s6000.h i2c: xtensa s6000 i2c driver 2009-04-07 10:23:34 +01:00
i2c-scmi.c i2c-scmi: Provide module aliases for automatic loading 2010-03-24 14:38:39 +01:00
i2c-sh7760.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-sh_mobile.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
i2c-sibyte.c i2c/mips: Fix error return codes from Sibyte i2c bus driver 2010-07-10 09:42:47 +02:00
i2c-simtec.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-sis96x.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-sis630.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-sis5595.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-stu300.c i2c-stu300: off by one issue 2010-04-20 01:17:13 +01:00
i2c-stub.c i2c-stub: Expose the default functionality flags 2010-05-21 18:40:56 +02:00
i2c-taos-evm.c i2c-taos-evm: Switch echo off to improve performance 2009-09-18 22:45:43 +02:00
i2c-tiny-usb.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
i2c-versatile.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-via.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-viapro.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
i2c-xiic.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
Kconfig i2c/busses: Move two drivers to embedded section 2010-06-03 11:33:56 +02:00
Makefile i2c/busses: Move two drivers to embedded section 2010-06-03 11:33:56 +02:00
scx200_acb.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00
scx200_i2c.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00