]> git.baikalelectronics.ru Git - kernel.git/commit
i2c: designware: Avoid aborted transfers with fast reacting I2C slaves
authorJarkko Nikula <jarkko.nikula@linux.intel.com>
Thu, 29 Sep 2016 13:04:59 +0000 (16:04 +0300)
committerWolfram Sang <wsa@the-dreams.de>
Tue, 25 Oct 2016 10:09:09 +0000 (12:09 +0200)
commitf8fcc4c4adc8be561d1a1b523aea5e8e095dc626
tree23c371ef09eb7faa351aa55c455745eaa85007ae
parent0fa833e5029d8ce13aae64bc0d4cb11247087118
i2c: designware: Avoid aborted transfers with fast reacting I2C slaves

I2C DesignWare may abort transfer with arbitration lost if I2C slave pulls
SDA down quickly after falling edge of SCL. Reason for this is unknown but
after trial and error it was found this can be avoided by enabling non-zero
SDA RX hold time for the receiver.

By the specification SDA RX hold time extends incoming SDA low to high
transition by n * ic_clk cycles but only when SCL is high. However it
seems to help avoid above faulty arbitration lost error.

Bits 23:16 in IC_SDA_HOLD register define the SDA RX hold time for the
receiver. Be conservative and enable 1 ic_clk cycle long hold time in
case boot firmware hasn't set it up.

Reported-by: Jukka Laitinen <jukka.laitinen@intel.com>
Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Tested-by: Jukka Laitinen <jukka.laitinen@intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-designware-core.c