imx/i2c: Make disable_delay a per-device variable
PATCH RESEND 1/1 imx/i2c: Make disable_delay a per-device variable
'disable_delay' was static which is wrong as it is calculated using the per-device bus speed. This patch turns 'disable_delay' into a per-device variable.
Reported-by Sascha Hauer <[email protected]>
Signed-off-by Wolfram Sang <[email protected]>
Acked-by Darius Augulis <[email protected]>
---
Ben, can you pick it up? Any plans when pushing your patches for 2.6.30?
drivers/i2c/busses/i2c-imx.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/i2c/busses/i2c-imx.c +3 -4
@@ -86,8 +86,6 @@/** Variables ****************************************************************** *******************************************************************************/ -static unsigned int disable_delay;/* Dummy delay */ -/* * sorted list of clock divider, register value pairs * taken from table 26-5, p.26-9, Freescale i.MX
@@ -121,6 +119,7 @@ struct imx_i2c_struct {int irq;wait_queue_head_t queue;unsigned long i2csr; +unsigned int disable_delay; };/** Functions for IMX I2C adapter driver ***************************************
@@ -212,7 +211,7 @@ static void i2c_imx_stop(struct imx_i2c_* This delay caused by an i.MXL hardware bug. * If no (or too short) delay, no "STOP" bit will be generated. */ -udelay (disable_delay); +udelay (i2c_imx->disable_delay);/* Disable I2C controller */ writeb (0 , i2c_imx->base +IMX_I2C_I2CR ); }
@@ -243,7 +242,7 @@ static void __init i2c_imx_set_clk(struc* This delay is used in I2C bus disable function * to fix chip hardware bug. */ - disable_delay = (500000U * i2c_clk_div[i][0 ] + i2c_imx->disable_delay = (500000U * i2c_clk_div[i][0 ] + (i2c_clk_rate /2 ) -1 ) / (i2c_clk_rate /2 );/* dev_dbg() can't be used, because adapter is not yet registered */
Signature · 2 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ |