aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/au0828/au0828-i2c.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/media/video/au0828/au0828-i2c.c b/drivers/media/video/au0828/au0828-i2c.c
index ee3e3040d54c..d57a38f5c738 100644
--- a/drivers/media/video/au0828/au0828-i2c.c
+++ b/drivers/media/video/au0828/au0828-i2c.c
@@ -156,6 +156,24 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap,
156 156
157 dprintk(4, "SEND: %02x\n", msg->addr); 157 dprintk(4, "SEND: %02x\n", msg->addr);
158 158
159 /* Deal with i2c_scan */
160 if (msg->len == 0) {
161 /* The analog tuner detection code makes use of the SMBUS_QUICK
162 message (which involves a zero length i2c write). To avoid
163 checking the status register when we didn't strobe out any
164 actual bytes to the bus, just do a read check. This is
165 consistent with how I saw i2c device checking done in the
166 USB trace of the Windows driver */
167 au0828_write(dev, REG_200, 0x20);
168 if (!i2c_wait_done(i2c_adap))
169 return -EIO;
170
171 if (i2c_wait_read_ack(i2c_adap))
172 return -EIO;
173
174 return 0;
175 }
176
159 for (i = 0; i < msg->len;) { 177 for (i = 0; i < msg->len;) {
160 178
161 dprintk(4, " %02x\n", msg->buf[i]); 179 dprintk(4, " %02x\n", msg->buf[i]);