 rc = i2c_recv_bytes(dev, addr, msgs[i].buf, msgs[i].len); 
if (dev->is_em2800) rc = em2800_i2c_recv_bytes(dev, addr, msgs[i].buf, msgs[i].len); else rc = em2820_i2c_recv_bytes(dev, addr, msgs[i].buf, msgs[i].len); 
static int em2820_i2c_xfer(struct i2c_adapter *i2c_adap,			   struct i2c_msg msgs[], int num){	struct em2820 *dev = i2c_adap->algo_data;	int addr, rc, i, byte;	if (num <= 0)		return 0;	for (i = 0; i < num; i++) {		addr = msgs[i].addr << 1;		dprintk1("%s %s addr=%x len=%d:",			 (msgs[i].flags & I2C_M_RD) ? "read" : "write",			 i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len);		if (!msgs[i].len) {	/* no len: check only for device presence */			rc = i2c_check_for_device(dev, addr);			if (rc < 0) {				dprintk2(" no device\n");				return rc;			}		}		if (msgs[i].flags & I2C_M_RD) {			/* read bytes */			rc = i2c_recv_bytes(dev, addr, msgs[i].buf,					    msgs[i].len);			if (i2c_debug) {				for (byte = 0; byte < msgs[i].len; byte++) {					printk(" %02x", msgs[i].buf[byte]);				}			}		} else {			/* write bytes */			if (i2c_debug) {				for (byte = 0; byte < msgs[i].len; byte++)					printk(" %02x", msgs[i].buf[byte]);			}			rc = i2c_send_bytes(dev, addr, msgs[i].buf, msgs[i].len,					    i == num - 1);			if (rc < 0)				goto err;		}		if (i2c_debug)			printk("\n");	}	return num;      err:	dprintk2(" ERROR: %i\n", rc);	return rc;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/596d92d5128d308b5a79f21c3e72c87f5fc7e58b/em28xx-i2c.c/buggy/drivers/media/video/em28xx/em28xx-i2c.c