Changeset 4388
- Timestamp:
- 05/05/07 17:38:06 (1 year ago)
- Files:
-
- i2c/trunk/CHANGES (modified) (1 diff)
- i2c/trunk/kernel/i2c-algo-bit.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
i2c/trunk/CHANGES
r4302 r4388 9 9 10 10 SVN HEAD 11 i2c-algo-bit: Always send a stop condition before leaving (2.6 backport) 11 12 12 13 i2c/trunk/kernel/i2c-algo-bit.c
r4246 r4388 316 316 for (i=0;i<=retries;i++) { 317 317 ret = i2c_outb(i2c_adap,addr); 318 if (ret ==1)319 break; /* success! */318 if (ret == 1 || i == retries) 319 break; 320 320 i2c_stop(adap); 321 321 udelay(5/*adap->udelay*/); 322 if (i==retries) /* no success */323 break;324 322 i2c_start(adap); 325 323 udelay(adap->udelay); … … 335 333 static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) 336 334 { 337 struct i2c_algo_bit_data *adap = i2c_adap->algo_data;338 335 char c; 339 336 const char *temp = msg->buf; … … 355 352 printk(KERN_ERR "i2c-algo-bit.o: %s sendbytes: error - bailout.\n", 356 353 i2c_adap->name); 357 i2c_stop(adap);358 354 return (retval<0)? retval : -EFAULT; 359 355 /* got a better one ?? */ … … 501 497 DEB2(printk(KERN_DEBUG "i2c-algo-bit.o: NAK from device addr %2.2x msg #%d\n", 502 498 msgs[i].addr,i)); 503 return (ret<0) ? ret : -EREMOTEIO;499 goto bailout; 504 500 } 505 501 } … … 508 504 ret = readbytes(i2c_adap, pmsg); 509 505 DEB2(printk(KERN_DEBUG "i2c-algo-bit.o: read %d bytes.\n",ret)); 510 if (ret < pmsg->len ) { 511 return (ret<0)? ret : -EREMOTEIO; 506 if (ret < pmsg->len) { 507 if (ret >= 0) 508 ret = -EREMOTEIO; 509 goto bailout; 512 510 } 513 511 } else { … … 515 513 ret = sendbytes(i2c_adap, pmsg); 516 514 DEB2(printk(KERN_DEBUG "i2c-algo-bit.o: wrote %d bytes.\n",ret)); 517 if (ret < pmsg->len ) { 518 return (ret<0) ? ret : -EREMOTEIO; 515 if (ret < pmsg->len) { 516 if (ret >= 0) 517 ret = -EREMOTEIO; 518 goto bailout; 519 519 } 520 520 } 521 521 } 522 ret = i; 523 524 bailout: 522 525 i2c_stop(adap); 523 return num;526 return ret; 524 527 } 525 528
