android_kernel_motorola_sm6225/drivers/i2c/busses
Roland Stigge c076ada4e4 i2c: pnx: Fix read transactions of >= 2 bytes
On transactions with n>=2 bytes, the controller actually wrongly clocks in n+1
bytes. This is caused by the (wrong) assumption that RFE in the Status Register
is 1 iff there is no byte already ordered (via a dummy TX byte). This lead to
the implementation of synchronized byte ordering, e.g.:

Dummy-TX - RX - Dummy-TX - RX - ...

But since RFE actually stays high after some Dummy-TX, it rather looks like:

Dummy-TX - Dummy-TX - RX - Dummy-TX - RX - (RX)

The last RX byte is clocked in by the bus controller, but ignored by the kernel
when filling the userspace buffer.

This patch fixes the issue by asking for RX via Dummy-TX asynchronously.
Introducing a separate counter for TX bytes.

Signed-off-by: Roland Stigge <stigge@antcom.de>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
2012-09-12 17:52:44 +02:00
..
i2c-acorn.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
i2c-ali15x3.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-ali1535.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-ali1563.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-amd756-s4882.c i2c: Use snprintf to set adapter names 2009-01-07 14:29:18 +01:00
i2c-amd756.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-amd8111.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-at91.c i2c-at91: Use struct dev_pm_ops for power management 2012-07-12 12:04:32 +02:00
i2c-au1550.c i2c/busses: Use module_platform_driver() 2012-01-12 20:32:04 +01:00
i2c-bfin-twi.c i2c: i2c-bfin-twi: Move blackfin TWI register access Macro to head file. 2012-07-13 08:37:31 +02:00
i2c-cpm.c i2c/busses: Use module_platform_driver() 2012-01-12 20:32:04 +01:00
i2c-davinci.c i2c: davinci: Free requested IRQ in remove 2012-05-12 20:36:24 +02:00
i2c-designware-core.c i2c: designware: Add support for 16bit register access 2012-05-12 14:28:11 +02:00
i2c-designware-core.h i2c: designware: Add support for 16bit register access 2012-05-12 14:28:11 +02:00
i2c-designware-pcidrv.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-designware-platdrv.c i2c: designware: Add clk_{un}prepare() support 2012-05-12 14:28:15 +02:00
i2c-diolan-u2c.c i2c: diolan-u2c: Fix master_xfer return code 2012-08-18 12:27:27 +02:00
i2c-eg20t.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-elektor.c Fix common misspellings 2011-03-31 11:26:23 -03:00
i2c-gpio.c i2c: Dynamically assign adapter id if it wasn't explictly specified 2012-05-12 14:28:11 +02:00
i2c-highlander.c Autogenerated GPG tag for Rusty D1ADB8F1: 15EE 8D6C AB0E 7F0C F999 BFCB D920 0E6C D1AD B8F1 2012-01-14 12:32:16 -08:00
i2c-hydra.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-i801.c i2c-i801: Enable IRQ for byte_by_byte transactions 2012-07-24 14:13:59 +02:00
i2c-ibm_iic.c Autogenerated GPG tag for Rusty D1ADB8F1: 15EE 8D6C AB0E 7F0C F999 BFCB D920 0E6C D1AD B8F1 2012-01-14 12:32:16 -08:00
i2c-ibm_iic.h
i2c-imx.c Merge branch 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux 2012-07-28 13:43:12 -07:00
i2c-intel-mid.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-iop3xx.c i2c/busses: Use module_platform_driver() 2012-01-12 20:32:04 +01:00
i2c-iop3xx.h i2c-iop3xx: add iomem annotation 2011-01-04 00:53:37 +00:00
i2c-isch.c i2c-isch: Decrease delay in command completion check loop 2012-03-26 21:47:18 +02:00
i2c-mpc.c i2c-mpc: avoid I2C abnormal after resuming from deep sleep 2012-05-12 14:28:12 +02:00
i2c-mv64xxx.c I2C: MV64XYZ: Add Device Tree support 2012-07-23 22:04:11 +02:00
i2c-mxs.c i2c: mxs: Set I2C timing registers for mxs-i2c 2012-07-13 10:33:42 +02:00
i2c-nforce2-s4985.c
i2c-nforce2.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-nomadik.c i2c: nomadik: Add default configuration into the Nomadik I2C driver 2012-08-18 09:56:56 +02:00
i2c-nuc900.c i2c: Split I2C_M_NOSTART support out of I2C_FUNC_PROTOCOL_MANGLING 2012-05-30 10:55:34 +02:00
i2c-ocores.c i2c: i2c-ocores: support for 16bit and 32bit IO 2012-07-14 13:30:25 +02:00
i2c-octeon.c i2c: Convert i2c-octeon.c to use device tree. 2012-07-23 13:54:53 +01:00
i2c-omap.c I2C: OMAP: xfer: fix runtime PM get/put balance on error 2012-08-18 10:11:44 +02:00
i2c-parport-light.c i2c-parport: Various cleanups 2011-05-24 20:58:49 +02:00
i2c-parport.c i2c-parport: Various cleanups 2011-05-24 20:58:49 +02:00
i2c-parport.h i2c-parport: Various cleanups 2011-05-24 20:58:49 +02:00
i2c-pasemi.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-pca-isa.c i2c-pca: Fix waitforcompletion() return value 2010-09-30 14:14:22 +02:00
i2c-pca-platform.c i2c: Dynamically assign adapter id if it wasn't explictly specified 2012-05-12 14:28:11 +02:00
i2c-piix4.c i2c-piix4: Support AMD auxiliary SMBus controller 2012-07-24 14:13:57 +02:00
i2c-pmcmsp.c i2c-pmcmsp: remove IRQF_SAMPLE_RANDOM which is now a no-op 2012-07-19 10:38:47 -04:00
i2c-pnx.c i2c: pnx: Fix read transactions of >= 2 bytes 2012-09-12 17:52:44 +02:00
i2c-powermac.c i2c/powermac: Improve detection of devices from device-tree 2012-07-11 18:22:46 +10:00
i2c-puv3.c i2c-puv3: Use struct dev_pm_ops for power management 2012-07-12 12:04:54 +02:00
i2c-pxa-pci.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-pxa.c i2c/i2c-pxa: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
i2c-s3c2410.c i2c-s3c2410: Use plain pm_runtime_put() 2012-07-13 11:18:09 +02:00
i2c-s6000.c i2c: Change mail address of Oskar Schirmer 2012-05-17 15:15:56 +02:00
i2c-s6000.h i2c: Change mail address of Oskar Schirmer 2012-05-17 15:15:56 +02:00
i2c-scmi.c i2c-scmi: Provide module aliases for automatic loading 2010-03-24 14:38:39 +01:00
i2c-sh7760.c i2c/busses: Use module_platform_driver() 2012-01-12 20:32:04 +01:00
i2c-sh_mobile.c i2c: sh_mobile: add device tree support 2012-05-12 14:28:12 +02: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/busses: Use module_platform_driver() 2012-01-12 20:32:04 +01:00
i2c-sirf.c i2c: add CSR SiRFprimaII on-chip I2C controllers driver 2012-03-07 19:05:04 +01:00
i2c-sis96x.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-sis630.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-sis5595.c i2c: Convert to DEFINE_PCI_DEVICE_TABLE 2012-01-12 20:32:04 +01:00
i2c-stu300.c i2c: stu300: use devm managed resources 2012-07-16 13:48:51 +02: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: Fix log messages 2011-06-29 11:36:10 +02:00
i2c-tegra.c i2c: tegra: protect suspend/resume callbacks with CONFIG_PM_SLEEP 2012-08-18 20:45:09 +02:00
i2c-tiny-usb.c i2c-tiny-usb: Add support for the Robofuzz OSIF USB/I2C converter 2012-07-24 14:13:59 +02:00
i2c-versatile.c i2c: Dynamically assign adapter id if it wasn't explictly specified 2012-05-12 14:28:11 +02:00
i2c-via.c i2c/busses: Use module_pci_driver 2012-07-24 14:13:56 +02:00
i2c-viapro.c Autogenerated GPG tag for Rusty D1ADB8F1: 15EE 8D6C AB0E 7F0C F999 BFCB D920 0E6C D1AD B8F1 2012-01-14 12:32:16 -08:00
i2c-xiic.c I2C: xiic: Add OF binding support 2012-05-12 14:28:18 +02:00
i2c-xlr.c i2c: Support for Netlogic XLR/XLS I2C controller. 2012-02-24 22:25:57 +01:00
Kconfig Merge branch 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux 2012-07-28 13:43:12 -07:00
Makefile i2c: ixp2000: remove driver 2012-05-12 14:28:14 +02:00
scx200_acb.c i2c: Convert to DEFINE_PCI_DEVICE_TABLE 2012-01-12 20:32:04 +01:00
scx200_i2c.c i2c: Use <linux/io.h> instead of <asm/io.h> 2010-05-21 18:41:01 +02:00