From: Hans Schillstrom Subject: i2c-bfin-twi: Fix mismatch in add timer and delete timer Move init_completion to just before i2c transfer. http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&tracker_item_id=3385 Signed-off-by: Hans Schillstrom Signed-off-by: Sonic Zhang Signed-off-by: Bryan Wu Signed-off-by: Jean Delvare --- drivers/i2c/busses/i2c-bfin-twi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- linux-2.6.25-rc7.orig/drivers/i2c/busses/i2c-bfin-twi.c 2008-03-26 15:25:10.000000000 +0100 +++ linux-2.6.25-rc7/drivers/i2c/busses/i2c-bfin-twi.c 2008-03-26 15:31:46.000000000 +0100 @@ -308,6 +308,7 @@ static int bfin_twi_master_xfer(struct i iface->writeNum = iface->readNum = pmsg->len; iface->result = 0; iface->timeout_count = 10; + init_completion(&(iface->complete)); /* Set Transmit device address */ write_MASTER_ADDR(iface, pmsg->addr); @@ -447,6 +448,7 @@ int bfin_twi_smbus_xfer(struct i2c_adapt iface->read_write = read_write; iface->command = command; iface->timeout_count = 10; + init_completion(&(iface->complete)); /* FIFO Initiation. Data in FIFO should be discarded before * start a new operation. @@ -608,7 +610,6 @@ static int i2c_bfin_twi_probe(struct pla } spin_lock_init(&(iface->lock)); - init_completion(&(iface->complete)); /* Find and map our resources */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);