[PATCH] i2c driver fixes for 2.6.4

Greg KH greg at kroah.com
Mon Mar 15 23:56:33 CET 2004


ChangeSet 1.1597.1.11, 2004/03/03 10:07:50-08:00, dave.jiang at intel.com

[PATCH] I2C: IOP3xx i2c driver update

  Here's a small patch update to the i2c-iop3xx.c in
drivers/i2c/busses/. It fixes some functions' return value and updated
the irq handler to be compatible with kernel 2.6. Thanks!


 drivers/i2c/busses/i2c-iop3xx.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)


diff -Nru a/drivers/i2c/busses/i2c-iop3xx.c b/drivers/i2c/busses/i2c-iop3xx.c
--- a/drivers/i2c/busses/i2c-iop3xx.c	Mon Mar 15 14:35:39 2004
+++ b/drivers/i2c/busses/i2c-iop3xx.c	Mon Mar 15 14:35:39 2004
@@ -129,7 +129,7 @@
  * NB: the handler has to clear the source of the interrupt! 
  * Then it passes the SR flags of interest to BH via adap data
  */
-static void iop3xx_i2c_handler(int this_irq, 
+static irqreturn_t iop3xx_i2c_handler(int this_irq, 
 				void *dev_id, 
 				struct pt_regs *regs) 
 {
@@ -142,6 +142,7 @@
 		iop3xx_adap->biu->SR_received |= sr;
 		wake_up_interruptible(&iop3xx_adap->waitq);
 	}
+	return IRQ_HANDLED;
 }
 
 /* check all error conditions, clear them , report most important */
@@ -185,7 +186,7 @@
 	unsigned sr = 0;
 	int interrupted;
 	int done;
-	int rc;
+	int rc = 0;
 
 	do {
 		interrupted = wait_event_interruptible_timeout (
@@ -198,13 +199,13 @@
 			return rc;
 		}else if (!interrupted) {
 			*status = sr;
-			return rc = -ETIMEDOUT;
+			return -ETIMEDOUT;
 		}
 	} while(!done);
 
 	*status = sr;
 
-	return rc = 0;
+	return 0;
 }
 
 /*
@@ -284,7 +285,7 @@
 {
 	unsigned cr = *iop3xx_adap->biu->CR;
 	int status;
-	int rc;
+	int rc = 0;
 
 	*iop3xx_adap->biu->DBR = byte;
 	cr &= ~IOP321_ICR_MSTART;
@@ -304,7 +305,7 @@
 {
 	unsigned cr = *iop3xx_adap->biu->CR;
 	int status;
-	int rc;
+	int rc = 0;
 
 	cr &= ~IOP321_ICR_MSTART;
 
@@ -386,13 +387,16 @@
 	iop3xx_adap_reset(iop3xx_adap);
 	iop3xx_adap_enable(iop3xx_adap);
 
-	for (im = 0; ret == 0 && im != num; ++im) {
+	for (im = 0; ret == 0 && im != num; im++) {
 		ret = iop3xx_handle_msg(i2c_adap, &msgs[im]);
 	}
 
 	iop3xx_adap_transaction_cleanup(iop3xx_adap);
+	
+	if(ret)
+		return ret;
 
-	return ret;   
+	return im;   
 }
 
 static int algo_control(struct i2c_adapter *adapter, unsigned int cmd,




More information about the lm-sensors mailing list