summaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/dvb-usb/m920x.c
diff options
context:
space:
mode:
authorTrent Piepho <xyzzy@speakeasy.org>2007-03-12 16:13:12 +0100
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-04-27 20:44:43 +0200
commit57f8dcf90bdf4c6b23ea2af3d307d1d137b696b9 (patch)
tree75ca4bd18c877bdf08164d806c9f235eee64f2ef /drivers/media/dvb/dvb-usb/m920x.c
parentV4L/DVB (5427): M920x: Improve I2C operations (diff)
downloadlinux-57f8dcf90bdf4c6b23ea2af3d307d1d137b696b9.tar.xz
linux-57f8dcf90bdf4c6b23ea2af3d307d1d137b696b9.zip
V4L/DVB (5428): M920x: Detect zero-length I2C messages and fix a typo
Change a 00 to just 0 Detect zero-length I2C messages and return not supported. I think I know how to send one, but the problem is getting the slave's ack. The only point of a zero-length message is for probing; too see if the slave will ack its address. Since we don't know how to get the ack, we can't support zero-length messages in a useful way, so it's probably best to just return not supported for them. Signed-off-by: Trent Piepho <xyzzy@speakeasy.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/dvb/dvb-usb/m920x.c')
-rw-r--r--drivers/media/dvb/dvb-usb/m920x.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/media/dvb/dvb-usb/m920x.c b/drivers/media/dvb/dvb-usb/m920x.c
index 08469ccabb72..8c954814f827 100644
--- a/drivers/media/dvb/dvb-usb/m920x.c
+++ b/drivers/media/dvb/dvb-usb/m920x.c
@@ -148,13 +148,18 @@ static int m9206_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
return -EAGAIN;
for (i = 0; i < num; i++) {
- if (msg[i].flags & (I2C_M_NO_RD_ACK|I2C_M_IGNORE_NAK|I2C_M_TEN)) {
+ if (msg[i].flags & (I2C_M_NO_RD_ACK|I2C_M_IGNORE_NAK|I2C_M_TEN) ||
+ msg[i].len == 0) {
+ /* For a 0 byte message, I think sending the address to index 0x80|0x40
+ * would be the correct thing to do. However, zero byte messages are
+ * only used for probing, and since we don't know how to get the slave's
+ * ack, we can't probe. */
ret = -ENOTSUPP;
goto unlock;
}
/* Send START & address/RW bit */
if (!(msg[i].flags & I2C_M_NOSTART)) {
- if ((ret = m9206_write(d->udev, M9206_I2C, (msg[i].addr<<1)|(msg[i].flags&I2C_M_RD?0x01:00), 0x80)) != 0)
+ if ((ret = m9206_write(d->udev, M9206_I2C, (msg[i].addr<<1)|(msg[i].flags&I2C_M_RD?0x01:0), 0x80)) != 0)
goto unlock;
/* Should check for ack here, if we knew how. */
}