From: Steven Toth Date: Thu, 20 Sep 2007 04:44:27 +0000 (-0300) Subject: V4L/DVB (6404): cx23885: i2c 16bit reg/val read/write fix X-Git-Tag: v2.6.25-rc1~1235^2~503 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e92adc2c39aaaa0129b7b97584784a8ba9da9ec4;p=linux-2.6 V4L/DVB (6404): cx23885: i2c 16bit reg/val read/write fix Fix i2c reads and writes of 16bit register address / values Signed-off-by: Steven Toth Signed-off-by: Michael Krufky Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/video/cx23885/cx23885-i2c.c b/drivers/media/video/cx23885/cx23885-i2c.c index 71da528932..f7e8a48169 100644 --- a/drivers/media/video/cx23885/cx23885-i2c.c +++ b/drivers/media/video/cx23885/cx23885-i2c.c @@ -84,7 +84,8 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, u32 wdata, addr, ctrl; int retval, cnt; - dprintk(1, "%s()\n", __FUNCTION__); + dprintk(1, "%s(msg->len=%d, last=%d)\n", __FUNCTION__, msg->len, last); + /* Deal with i2c probe functions with zero payload */ if (msg->len == 0) { cx_write(bus->reg_addr, msg->addr << 25); @@ -127,7 +128,7 @@ static int i2c_sendbytes(struct i2c_adapter *i2c_adap, wdata = msg->buf[cnt]; ctrl = bus->i2c_period | (1 << 12) | (1 << 2); - if (cnt < msg->len-1 || !last) + if (cnt < msg->len - 1) ctrl |= I2C_NOSTOP | I2C_EXTEND; cx_write(bus->reg_addr, addr); @@ -162,7 +163,7 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap, u32 ctrl, cnt; int retval; - dprintk(1, "%s()\n", __FUNCTION__); + dprintk(1, "%s(msg->len=%d, last=%d)\n", __FUNCTION__, msg->len, last); /* Deal with i2c probe functions with zero payload */ if (msg->len == 0) { @@ -178,11 +179,14 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap, return 0; } + if (i2c_debug) + printk(" addr << 1) + 1); + for(cnt = 0; cnt < msg->len; cnt++) { ctrl = bus->i2c_period | (1 << 12) | (1 << 2) | 1; - if (cnt < msg->len-1 || !last) + if (cnt < msg->len - 1) ctrl |= I2C_NOSTOP | I2C_EXTEND; cx_write(bus->reg_addr, msg->addr << 25); @@ -195,9 +199,7 @@ static int i2c_readbytes(struct i2c_adapter *i2c_adap, goto eio; msg->buf[cnt] = cx_read(bus->reg_rdata) & 0xff; if (i2c_debug) { - if (!(ctrl & I2C_NOSTOP)) - printk(" addr << 1) +1); - printk(" =%02x", msg->buf[cnt]); + printk(" %02x", msg->buf[cnt]); if (!(ctrl & I2C_NOSTOP)) printk(" >\n"); }