|
@@ -181,16 +181,25 @@ static int em2800_i2c_recv_bytes(struct em28xx *dev, unsigned char addr,
|
|
|
|
|
|
/*
|
|
|
* em28xx_i2c_send_bytes()
|
|
|
- * untested for more than 4 bytes
|
|
|
*/
|
|
|
static int em28xx_i2c_send_bytes(void *data, unsigned char addr, char *buf,
|
|
|
short len, int stop)
|
|
|
{
|
|
|
int wrcount = 0;
|
|
|
struct em28xx *dev = (struct em28xx *)data;
|
|
|
+ int write_timeout, ret;
|
|
|
|
|
|
wrcount = dev->em28xx_write_regs_req(dev, stop ? 2 : 3, addr, buf, len);
|
|
|
|
|
|
+ /* Seems to be required after a write */
|
|
|
+ for (write_timeout = EM2800_I2C_WRITE_TIMEOUT; write_timeout > 0;
|
|
|
+ write_timeout -= 5) {
|
|
|
+ ret = dev->em28xx_read_reg(dev, 0x05);
|
|
|
+ if (!ret)
|
|
|
+ break;
|
|
|
+ msleep(5);
|
|
|
+ }
|
|
|
+
|
|
|
return wrcount;
|
|
|
}
|
|
|
|