ChangeSet 1.1597.1.11, 2004/03/03 10:07:50-08:00, dave.jiang@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,