linux-stable/drivers/i2c
Lucas Stach 535ebd217d i2c: mxs: remove races in PIO code
This commit fixes the three following races in PIO code:

- The CTRL0 register is racy in itself, when programming transfer state and
  run bit in the same cycle the hardware sometimes ends up using the state
  from the last transfer. Fix this by programming state in one cycle, make
  sure the write is flushed down APBX bus by reading back the reg and only
  then trigger the run bit.

- Only clear the DMAREQ bit in DEBUG0 after the read/write to the data reg
  happened. Otherwise we are racing with the hardware about who touches
  the data reg first.

- When checking for completion of a transfer it's not sufficient to check
  if the data engine finished, but also a check for i2c bus idle is needed.
  In PIO mode we are really fast to program the next transfer after a finished
  one, so the controller possibly tries to start a new transfer while the
  clkgen engine is still busy writing the NAK/STOP from the last transfer to
  the bus.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2013-04-15 18:26:46 +02:00
..
algos Linux 3.6-rc7 2012-10-08 12:46:32 +02:00
busses i2c: mxs: remove races in PIO code 2013-04-15 18:26:46 +02:00
muxes i2c: Ignore the return value of i2c_del_mux_adapter() 2013-04-02 07:07:29 +02:00
i2c-boardinfo.c i2c: Update the FSF address 2012-03-26 21:47:19 +02:00
i2c-core.c i2c: remove CONFIG_HOTPLUG ifdefs 2013-04-09 11:57:55 +02:00
i2c-core.h i2c: Update the FSF address 2012-03-26 21:47:19 +02:00
i2c-dev.c new helper: file_inode(file) 2013-02-22 23:31:31 -05:00
i2c-mux.c i2c: Make the return type of i2c_del_mux_adapter() void 2013-04-02 07:07:32 +02:00
i2c-smbus.c i2c-smbus: Convert kzalloc to devm_kzalloc 2012-10-05 22:23:52 +02:00
i2c-stub.c i2c-stub: Move to drivers/i2c 2012-10-28 21:37:00 +01:00
Kconfig drivers/i2c: remove !S390 dependency, add missing GENERIC_HARDIRQS dependencies 2013-03-11 09:59:02 +01:00
Makefile i2c-stub: Move to drivers/i2c 2012-10-28 21:37:00 +01:00