i2c: designware: prevent early stop on TX FIFO empty
authorAndrew Jackson <Andrew.Jackson@arm.com>
Fri, 7 Nov 2014 12:10:44 +0000 (12:10 +0000)
committerWolfram Sang <wsa@the-dreams.de>
Fri, 21 Nov 2014 07:06:32 +0000 (08:06 +0100)
If the Designware core is configured with IC_EMPTYFIFO_HOLD_MASTER_EN
set to zero, allowing the TX FIFO to become empty causes a STOP
condition to be generated on the I2C bus. If the transmit FIFO
threshold is set too high, an erroneous STOP condition can be
generated on long transfers - particularly where the interrupt
latency is extended.

Signed-off-by: Andrew Jackson <Andrew.Jackson@arm.com>
Signed-off-by: Liviu Dudau <Liviu.Dudau@arm.com>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-designware-core.c

index edca99dbba23dcd042a54bd6c7a5b5ad13e0b41e..23628b7bfb8d8df208c6e434efb95e887dfad6e6 100644 (file)
@@ -359,7 +359,7 @@ int i2c_dw_init(struct dw_i2c_dev *dev)
        }
 
        /* Configure Tx/Rx FIFO threshold levels */
-       dw_writel(dev, dev->tx_fifo_depth - 1, DW_IC_TX_TL);
+       dw_writel(dev, dev->tx_fifo_depth / 2, DW_IC_TX_TL);
        dw_writel(dev, 0, DW_IC_RX_TL);
 
        /* configure the i2c master */
This page took 0.026309 seconds and 5 git commands to generate.