diff options
-rw-r--r-- | drivers/media/video/au0828/au0828-i2c.c | 18 |
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]); |