From 195c1f08bad0fe4566db924e185268da4421475f Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 22 Feb 2010 14:35:06 -0300 Subject: [PATCH] --- yaml --- r: 192743 b: refs/heads/master c: 02512fe33e9162713cd522937aabc81fcd97ad74 h: refs/heads/master i: 192741: 5e9a72b847faf8e04773fdf20776d9710562b31f 192739: 978b8eedf4ff6873df1fa1088150168806d85e92 192735: 62fd0b0560f7a9e58cf06d2ef5fe443408c5f180 v: v3 --- [refs] | 2 +- trunk/drivers/staging/tm6000/tm6000-i2c.c | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 74190aa0d518..13b985835765 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4e11502d4597c6252411dc1b5c16b47d08b5f246 +refs/heads/master: 02512fe33e9162713cd522937aabc81fcd97ad74 diff --git a/trunk/drivers/staging/tm6000/tm6000-i2c.c b/trunk/drivers/staging/tm6000/tm6000-i2c.c index a5323303c34a..ec4c9381c14a 100644 --- a/trunk/drivers/staging/tm6000/tm6000-i2c.c +++ b/trunk/drivers/staging/tm6000/tm6000-i2c.c @@ -56,9 +56,23 @@ static int tm6000_i2c_recv_regs(struct tm6000_core *dev, unsigned char addr, __u8 reg, char *buf, int len) { int rc; + u8 b[2]; - rc = tm6000_read_write_usb(dev, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, + if ((dev->caps.has_zl10353) && (dev->demod_addr << 1 == addr) && (reg % 2 == 0)) { + /* + * Workaround an I2C bug when reading from zl10353 + */ + reg -= 1; + len += 1; + + rc = tm6000_read_write_usb(dev, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, + REQ_16_SET_GET_I2C_WR1_RDN, addr | reg << 8, 0, b, len); + + *buf = b[1]; + } else { + rc = tm6000_read_write_usb(dev, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, REQ_16_SET_GET_I2C_WR1_RDN, addr | reg << 8, 0, buf, len); + } return rc; }