Commit 632fe9fe authored by Oliver Endriss's avatar Oliver Endriss Committed by Mauro Carvalho Chehab

V4L/DVB (10843): saa7146: Clean-up i2c error handling

saa7146: Clean-up i2c error handling

Simplify i2c error handling and fix incorrect handling of
address errors in poll mode.
Signed-off-by: default avatarOliver Endriss <o.endriss@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 7c9e34aa
...@@ -293,7 +293,6 @@ static int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *m ...@@ -293,7 +293,6 @@ static int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *m
int i = 0, count = 0; int i = 0, count = 0;
__le32 *buffer = dev->d_i2c.cpu_addr; __le32 *buffer = dev->d_i2c.cpu_addr;
int err = 0; int err = 0;
int address_err = 0;
int short_delay = 0; int short_delay = 0;
if (mutex_lock_interruptible(&dev->i2c_lock)) if (mutex_lock_interruptible(&dev->i2c_lock))
...@@ -333,17 +332,10 @@ static int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *m ...@@ -333,17 +332,10 @@ static int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *m
i2c address probing, however, and address errors indicate that a i2c address probing, however, and address errors indicate that a
device is really *not* there. retrying in that case device is really *not* there. retrying in that case
increases the time the device needs to probe greatly, so increases the time the device needs to probe greatly, so
it should be avoided. because of the fact, that only it should be avoided. So we bail out in irq mode after an
analog based cards use irq based i2c transactions (for dvb address error and trust the saa7146 address error detection. */
cards, this screwes up other interrupt sources), we bail out if (-EREMOTEIO == err && 0 != (SAA7146_USE_I2C_IRQ & dev->ext->flags))
completely for analog cards after an address error and trust
the saa7146 address error detection. */
if ( -EREMOTEIO == err ) {
if( 0 != (SAA7146_USE_I2C_IRQ & dev->ext->flags)) {
goto out; goto out;
}
address_err++;
}
DEB_I2C(("error while sending message(s). starting again.\n")); DEB_I2C(("error while sending message(s). starting again.\n"));
break; break;
} }
...@@ -358,10 +350,9 @@ static int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *m ...@@ -358,10 +350,9 @@ static int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *m
} while (err != num && retries--); } while (err != num && retries--);
/* if every retry had an address error, exit right away */ /* quit if any error occurred */
if (address_err == retries) { if (err != num)
goto out; goto out;
}
/* if any things had to be read, get the results */ /* if any things had to be read, get the results */
if ( 0 != saa7146_i2c_msg_cleanup(msgs, num, buffer)) { if ( 0 != saa7146_i2c_msg_cleanup(msgs, num, buffer)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment