Title: [6634] trunk/drivers/i2c/busses/i2c-bfin-twi.c: Replace timeout timer with wait_for_completion_timeout
Revision
6634
Author
sonicz
Date
2009-06-10 05:45:09 -0500 (Wed, 10 Jun 2009)

Log Message

Replace timeout timer with wait_for_completion_timeout

Clean up code.

Modified Paths

Diff

Modified: trunk/drivers/i2c/busses/i2c-bfin-twi.c (6633 => 6634)


--- trunk/drivers/i2c/busses/i2c-bfin-twi.c	2009-06-10 10:13:36 UTC (rev 6633)
+++ trunk/drivers/i2c/busses/i2c-bfin-twi.c	2009-06-10 10:45:09 UTC (rev 6634)
@@ -23,7 +23,7 @@
 #include <asm/portmux.h>
 #include <asm/irq.h>
 
-#define POLL_TIMEOUT       (2 * HZ)
+#define POLL_TIMEOUT       (20 * HZ)
 
 /* SMBus mode*/
 #define TWI_I2C_MODE_STANDARD		1
@@ -42,8 +42,6 @@
 	int			cur_mode;
 	int			manual_stop;
 	int			result;
-	int			timeout_count;
-	struct timer_list	timeout_timer;
 	struct i2c_adapter	adap;
 	struct completion	complete;
 	struct i2c_msg 		*pmsg;
@@ -260,32 +258,11 @@
 	unsigned long flags;
 
 	spin_lock_irqsave(&iface->lock, flags);
-	del_timer(&iface->timeout_timer);
 	bfin_twi_handle_interrupt(iface);
 	spin_unlock_irqrestore(&iface->lock, flags);
 	return IRQ_HANDLED;
 }
 
-static void bfin_twi_timeout(unsigned long data)
-{
-	struct bfin_twi_iface *iface = (struct bfin_twi_iface *)data;
-	unsigned long flags;
-
-	spin_lock_irqsave(&iface->lock, flags);
-	bfin_twi_handle_interrupt(iface);
-	if (iface->result == 0) {
-		iface->timeout_count--;
-		if (iface->timeout_count > 0) {
-			iface->timeout_timer.expires = jiffies + POLL_TIMEOUT;
-			add_timer(&iface->timeout_timer);
-		} else {
-			iface->result = -1;
-			complete(&iface->complete);
-		}
-	}
-	spin_unlock_irqrestore(&iface->lock, flags);
-}
-
 /*
  * Generic i2c master transfer entrypoint
  */
@@ -317,7 +294,6 @@
 	iface->transPtr = pmsg->buf;
 	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);
@@ -356,16 +332,15 @@
 		iface->manual_stop = 1;
 	}
 
-	iface->timeout_timer.expires = jiffies + POLL_TIMEOUT;
-	add_timer(&iface->timeout_timer);
-
 	/* Master enable */
 	write_MASTER_CTL(iface, read_MASTER_CTL(iface) | MEN |
 		((iface->read_write == I2C_SMBUS_READ) ? MDIR : 0) |
 		((CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ > 100) ? FAST : 0));
 	SSYNC();
 
-	wait_for_completion(&iface->complete);
+	if (!wait_for_completion_timeout(&iface->complete,
+		jiffies + POLL_TIMEOUT))
+		iface->result = -1;
 
 	rc = iface->result;
 
@@ -467,7 +442,6 @@
 	iface->manual_stop = 0;
 	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
@@ -484,9 +458,6 @@
 	write_MASTER_ADDR(iface, addr);
 	SSYNC();
 
-	iface->timeout_timer.expires = jiffies + POLL_TIMEOUT;
-	add_timer(&iface->timeout_timer);
-
 	switch (iface->cur_mode) {
 	case TWI_I2C_MODE_STANDARDSUB:
 		write_XMT_DATA8(iface, iface->command);
@@ -549,7 +520,6 @@
 					write_MASTER_CTL(iface, 0xff << 6);
 					iface->manual_stop = 1;
 				} else {
-					del_timer(&iface->timeout_timer);
 					break;
 				}
 			}
@@ -665,10 +635,6 @@
 		goto out_error_no_irq;
 	}
 
-	init_timer(&(iface->timeout_timer));
-	iface->timeout_timer.function = bfin_twi_timeout;
-	iface->timeout_timer.data = "" long)iface;
-
 	p_adap = &iface->adap;
 	p_adap->id = I2C_HW_BLACKFIN;
 	p_adap->nr = pdev->id;
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to